千家信息网

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

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章给大家分享的是有关asp.net mvc中如何添加Service和Repository层的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Service层主要是我们的业
千家信息网最后更新 2026年11月01日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安全错误 数据库的锁怎样保障安全 什么是科技互联网 百单网互联网科技有限公司怎么样 蓝思科技飞鸽互联网 河南真二互联网科技有限公司 金融科技 互联网金融 九亚互联网科技 中国的互联网科技企业的崛起 受益于互联网科技的高速发展 千方科技属于互联网企业吗 互联网5g黑科技有哪些 中国科技创新与世界互联网大会 广州新华互联网科技学校电竞方面 保险科技服务互联网营销体系 工业互联网展湾科技股份有限公司 广州百诚互联网科技有限公司官网 富国互联网科技002692 卡尔迅互联网科技有限公司 珠海东科互联网科技有限公司 科技和互联网行业的特点 互联网科技博主张洲 广东猪兼强互联网科技有限公司 广州互联网科技公司 互联网科技股票 北京互联网络科技有限公司 互联网科技小额贷款 世界互联网科技公司市值排名 电子科技大学互联网创业大赛 互联网科技如何创业 中天科技中国工业互联网 现代科技的标志之一的互联网
0