千家信息网

asp.net mvc中如何添加Service和Repository层

发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,这篇文章给大家分享的是有关asp.net mvc中如何添加Service和Repository层的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Service层主要是我们的业
千家信息网最后更新 2025年11月10日asp.net mvc中如何添加Service和Repository层

这篇文章给大家分享的是有关asp.net mvc中如何添加Service和Repository层的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

Service层主要是我们的业务逻辑层,这一层不和底层的Database打交道,和Database打交道的是Repository数据持久层。本篇文章通过使用StructureMap依赖注入使Controller,Service,Repository三层的耦合度降到最低。

本系统使用NorthWind开源数据,并且使用EntityFramework5.0实现对数据库的Object映射。

开始正题之前先来看一下成型的框架结构,我们将围绕这个截图进行展开。

undefined

首先我们看TYStudioDemo.Models这个Project里面的内容

这里面有我们的EntityFramwork的edmx文件,Northwind的数据库表映射的对象集合。这里建立ADO.Net Entity Data Model的时候没有使用默认生成一堆.tt文件的方式,而是使用了老的形式。实现方法是首先按默认程序建立起data model,建立好data model之后删除.tt文件。然后打开.edmx文件,右键单击空白处选择Properties(属性),会出现下面的截图,这时候只需要修改一下Code Generation Strategy(中文翻译不知道是什么,第一个就对了)的值,默认是None,我们修改为Default,然后保存.edmx



你应该已经注意到了,项目里多了一个TYEntities.cs文件,这个我们是我们这个系统中实现Transaction(事务处理)的关键。
我们使用static和[ThreadStatic]属性来保证一个线程拿到的TYEntities(ObjectContext)总是同一个,这就解决了Transaction事务的问题。没有解释到的请详细阅读下面代码里面的注释。

复制代码 代码如下:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;

namespace TYStudioDemo.Models
{
public partial class TYEntities
{
#region Fields

//定义索引名称
const string ContextKey = "TYEntities";

//标记为ThreadStaticAttribute的静态字段不在线程之间共享。
//每个执行线程都有单独的字段实例,并且独立地设置及获取该字段的值。如果在不同的线程中访问该字段,则该字段将包含不同的值。
[ThreadStatic]
private static TYEntities _current;

#endregion

#region Properties

public bool Disposed { get; set; }

///


/// 当系统工作在HttpContext下,将使用延迟家在技术返回一个TYEntities(ObjectContext),如果没有HttpContext将返回null
///
/// 不论在哪里使用TYEntities,在请求结束后都需要调用TYEntities.Cleanup()方法
/// 最佳的方式是TYEntities.Cleanup()放到Global.asax.cs文件里面。
/// void Application_EndRequest(object sender, EventArgs e)
/// {
/// TYStudioDemo.Models.TYEntities.Cleanup();
/// }
///

private static TYEntities ForWebRequest
{
get
{
var context = HttpContext.Current;

//检查HttpContext是否存在
if (context != null)
{
//试着从context中得到TYEntities
var result = context.Items[ContextKey] as TYEntities;

if (result == null)
{
//创建新的datacontext,并且保存到context里面
result = new TYEntities();
context.Items[ContextKey] = result;
}

return result;
}

return null;
}
}

///
/// 这是一个用来获取TYEntities(ObjectContext)的公共属性
///
/// 如果你通过HttpContext获取TYEntities,同样不论在哪里使用TYEntities,在请求结束后都需要调用TYEntities.Cleanup()方法
///
/// 如果没有通过HttpContext获取TYEntities,你必须在使用结束之后调用TYEntities.Cleanup()方法,来清理ObjectContext。
///
/// 需要注意的一点是,无论使用哪种方式获取TYEntities,我们都必须手动的清理和Dispose TYEntities(ObjectContext)。
/// 所以一定不要在using块中使用TYEntities(ObjectContext)。
///

public static TYEntities Current
{
get
{
//从HttpContext中获取datacontext
var result = TYEntities.ForWebRequest;

if (result != null)
return result;

//试着获取当前活动的TYEntities
if (_current == null)
_current = new TYEntities();

return _current;
}
}

///
/// 清理结束TYEntities(ObjectContext)
///

public static void Cleanup()
{
if (HttpContext.Current != null)
{
var result = HttpContext.Current.Items[ContextKey] as TYEntities;

if (result != null)
result.Dispose();

HttpContext.Current.Items[ContextKey] = null;
}
else if (_current != null)
{
_current.Dispose();
_current = null;
}
}


protected override void Dispose(bool disposing)
{
bool disposed = Disposed;
Disposed = true;

if (!disposed)
Cleanup();

base.Dispose(disposing);
}

#endregion
}
}

感谢各位的阅读!关于"asp.net mvc中如何添加Service和Repository层"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

文件 字段 数据 方法 线程 代码 内容 属性 方式 系统 不同 事务 截图 数据库 文章 更多 篇文章 不错 最低 不和 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 如何安装金仓数据库 坪山区光纤网络技术开发动态 163邮箱服务器地址和端口 阿里云学生服务器认证 惠普服务器延保 周口金蝶中国软件开发 光遇正式服为什么登录服务器失败 极狐网络技术广州有限公司 网络安全协议需要密码吗 常州专业服务器厂商 天逸510s软件开发 jsp页面读取数据库 舟山桌面软件开发自学步骤 mc外服服务器偷龙蛋 树立网络安全意识手抄报素材 嵌入式软件开发要写界面码 天津服务器回收价目表虚拟主机 网络技术专升本知识点总结 互联网趋势下数据库的重要性 登录lol时显示请检查服务器 帆软数据库连接配置报错 数据库怎么设置一个姓氏查询 我的世界亚洲最大服务器的管理 畅捷通数据库怎么设置 农业银行软件开发中心 知乎 什么是数据库的事务有哪些场景 ao财务数据库采集 后置服务器 酷我音乐显示服务器错误怎么解决 南威互联网科技
0