add repository(仓库) EntityState状态

仓储和工作单元模式是用来在数据访问层和业务逻辑层之间创建一个抽象层。

图很重要

首先我们先搭建好空的框架,准备基本的结构和一些测试数据。(新建一个项目XEngine)

然后建立model->SysUser, SysRole , SysUserRole

还有安装ef(为什么我的一直安装不上,狗屁电脑)

在建立dal

新建类 XEngineContext.cs

新建类 XEngineInitializer.cs具体(http://www.cnblogs.com/miro/p/4806199.html)

.新建文件夹 Repositories(用来储存仓库类)

创建接口 ISysUserRepository

接口中声明了一组典型的CRUD方法。

IEnumerable<SysUser> GetUsers();
SysUser GetUserBy(int userID);
void InsertUser(SysUser user);
void DeleteUser(int userID);
void UpdateUser(SysUser user);
void Save();

创建对应的仓储类 SysUserRepository

创建类 SysUserRepository, 实现接口 ISysUserRepository

ef中的EntityState

添加、修改、删除就是Added、Modified、Deleted

当调用SaveChanges方法的时候,EF会根据EntityState这个枚举检测到实体的状态,然后执行相应的增/删/改操作。它们的具体意思分别为:

  • Detached:对象存在,但未由对象服务跟踪。在创建实体之后、但将其添加到对象上下文之前,该实体处于此状态;
  • Unchanged:自对象加载到上下文中后,或自上次调用 System.Data.Objects.ObjectContext.SaveChanges() 方法后,此对象尚未经过修改;
  • Added:对象已添加到对象上下文,但尚未调用 System.Data.Objects.ObjectContext.SaveChanges() 方法;
  • Deleted:使用 System.Data.Objects.ObjectContext.DeleteObject(System.Object) 方法从对象上下文中删除了对象;
  • Modified:对象已更改,但尚未调用 System.Data.Objects.ObjectContext.SaveChanges() 方法。

Controller中使用SysUser仓储类

我们新建个Controller : UserController

用 List 模板生成视图。

修改Controller如下:

private IGenericRepository<SysUser> userRepository
 = new GenericRepository<SysUser>(new XEngineContext());

public ActionResult Index()

{

 var users = userRepository.Get();
return View(users);
}

我们增加了一个抽象层,将数据连接的部分移到Repository中去,这样实现了Controller和数据层的解耦。

使用 generic repository去除冗余代码

使用unit of work保证所有repositories使用同一个 context

新建一个unit of work class 用来协调多个repositories工作, 通过创建单一的context让大家共享。

先解决代码冗余的问题

仿照ISysUserRepository和SysUserRepository,新建IGenericRepository和GenericRepository(引用TEntity)

通过泛型类已经消除了冗余。

如果有其他实体只需要改变传入的TEntity就可以了,不需要再重新创建repository class

在DAL文件夹中新建一个类UnitOfWork用来负责context的一致性:

当使用多个repositories时,共享同一个context

我们把使用多个repositories的一系列操作称为一个 unit of work

当一个unit of work完成时,我们调用context的SaveChanges方法来完成实际的更改。

把 GenericRepository.cs 中的Save 和 Dispose 删除, 移到UnitOfWork中。

将IGenericRepository 中的IDisposable接口继承也去掉.

Save & Dispose 的工作统一在UnitOfWork中完成。

修改UserController

private UnitOfWork unitOfWork = new UnitOfWork();

// GET: User
public ActionResult Index()
{
var users = unitOfWork.SysUserRepository.Get(orderBy:q=>q.OrderBy(u=>u.Name));
return View(users);
}

时间: 2024-10-29 13:18:39

add repository(仓库) EntityState状态的相关文章

Entity Framework应用:根据实体的EntityState状态实现增删改查

在上一篇文章中,我们讲解了使用EF实现简单的增删改成,在这篇文章中我们使用实体的EntityState状态来优化数据的增删改查. 一.修改数据 上篇文章中的修改数据的方法是EF官方推荐的方式,即先查询出来要修改的数据,然后在修改.但是这种操作会导致多次操作数据库: 从上面的截图中可以看出,查询数据的时候会执行一次事物,修改的时候又执行了一次事物,即修改数据会操作两次数据库.那么有没有什么方法可以只操作一次数据库呢?那就是下面要讲解的EntityState. 使用EntityState优化上面的修

maven添加repository仓库

在 setting文件中找到 <localRepository>/path/to/local/repo</localRepository> 其中/path/to/local/repo是你仓库repository的路径,添加后 在eclipse里找到下图show view,右击rebuild index 然后maven项目pom.xml就可以用仓库的jar包了 maven添加repository仓库,布布扣,bubuko.com

Github如何删除repository(仓库)

首先就是你的Github主页了. 第二步点击进入一个repository(仓库) 第三步点击右上的setting 将此页面滑动到最下面找个这个 点击删除即可!

GitHub如何删除一个repository仓库

首先进入需要删除的repository,比如我想删除azure-linux-automation仓库: 可以看到右侧有一个“Settings”选项(图中用红色框标出),点击“Settings”选项进入其设置界面. 2. 在打开的设置页面的最下方,可以看到“Delete this repository”按钮,如下所示: !注意删除操作是不可恢复的,所以要慎重! 确定要删除仓库,点击“Delete this repository”按钮,这时会弹出如下窗口. 在该窗口中输入要删除的仓库名称,比如我的仓

github如何删除一个(repository)仓库

GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub.作为开源代码库以及版本控制系统,Github拥有140多万开发者用户.随着越来越多的应用程序转移到了云上,Github已经成为了管理软件开发以及发现已有代码的首选方法. 在这, 简单记录一下如何在github上删除一个repository. 1. 进入自己的github主页, 选中想要删除的仓库. 2. 进入选中的仓库, 点击Setings选项 3. 进入 Setings

github如何删除一个repository(仓库)

http://blog.csdn.net/wangxm245/article/details/7792723 第一步:在要删除的仓库目录下,点击页面右侧下方的settings按钮 第二步:在settings页的最下方有个Danger Zone,点击删除会弹出警告框 第三步:在警告框中填入要删除的仓库的名字再次确认即可删除.

EF中的EntityState状态解读

该状态对应的值为以下五种: Detached:对象存在,但未由对象服务跟踪.在创建实体之后.但将其添加到对象上下文之前,该实体处于此状态:Unchanged:自对象加载到上下文中后,或自上次调用 System.Data.Objects.ObjectContext.SaveChanges() 方法后,此对象尚未经过修改:Added:对象已添加到对象上下文,但尚未调用 System.Data.Objects.ObjectContext.SaveChanges() 方法:Deleted:使用 Syst

github【如何删除一个repository(仓库)】

如何删除自己创建的一个项目,我浏览了一下github网站,确实不太容易找到删除功能.这里介绍一下啊如何在github上删除一个repository 一:首先点击进入你要删除的repository,如下图,点击setting 二:将网页拉到下方,找到Delete this repository 按钮,点击. 三:在弹出的对话框中输入你的repository的名字,然后点击下方的按钮完成删除. OK,这样就完全删除了一个项目.

【转】如何删除一个repository(仓库)

原文网址:http://my.oschina.net/anna153/blog/377758?p=1 如何删除自己创建的一个项目,我浏览了一下github网站,确实不太容易找到删除功能.这里介绍一下啊如何在github上删除一个repository 一:首先点击进入你要删除的repository,如下图,点击setting 二:将网页拉到下方,找到Delete this repository 按钮,点击. 三:在弹出的对话框中输入你的repository的名字,然后点击下方的按钮完成删除. OK