Tag: 工作单元

如何设计工作单元以支持批量操作并提供更高的性能?

我有两个不同的工作单元:一个基于ADO.NET ,主要调用存储过程( uowADO ),另一个使用Entity Framework 6 ( uowEF ),最近为了支持Oracle数据库而添加,因此我没有必要重写所有SP(我的知识在那里有限)。 因此,在对数据库执行操作时,业务层只加载其中一个(基于配置)(但我不能并行使用它们,因为uowADO不支持Oracle) 添加新的uowEF我注意到了大的性能问题,当然主要是批量操作。 基本上我现在只有当前IUnitOfWork上的Commit和Rollback方法……非常接近本文的建议。 所以,我正在考虑重做这个工作单元。 例如,我读到有时在涉及批量操作时禁用dbContext.Configuration.AutoDetectChangesEnabled ,以及其他有关EF的优化提示可能有所帮助。 不幸的是,我不确定如何设计这样的工作单元以使其通用,以便我可以在BL和数据访问层的所有情况下使用它: ADO.NET和EF 。 有什么想法,建议和良好的链接吗?

如何使用UnitOfWork和DatabaseFactory&Generic Repository添加多个DbContext

我想在My ASP.NET MVC 5 App中添加两个DbContext,为ASPIdentity添加一个DbContext,为我的APP DB添加另一个DbContext。 我正在使用存储库模式。 我的问题是,如何在BaseRepository中指定每个DbContext的实体 ? 这就是我做的。 1- DatabaseFactory和IDatabaseFactory public class DatabaseFactory where T : DbContext,new() { private T dbContext; public T Init() { return dbContext ?? (dbContext = new T()); } } public interface IDatabaseFactory where T : DbContext { T Init(); } 2- IUnitOfWork和UnitOfWork public class UnitOfWork : IUnitOfWork where […]

如何使用通用存储库模式的连接 – entity framework

我有一个像下面的Generic Repository来处理我的CRUD ,对于一个易于使用的单个实体,当我尝试加入我的POCOs 。 假设我有这些POCO,它们使用流畅的api(多对多和一对多关系)进行映射: public class Student { public Student() { this.Courses = new HashSet(); } public int StudentId { get; set; } public string StudentName { get; set; } //FKs public virtual Standard Standard { get; set; } public int StdandardRefId { get; set; } public virtual ICollection Courses { get; set; } […]

为什么我会在NHibernate会话之上使用工作单元模式?

我什么时候会在NHibernate已经提供的东西上编写UoW实现? 有真实世界的例子吗?

UOW + Repository + Autofac加载两个不同的DbContext

我今天面临一个问题,我无法解决,我搜索了很多,无法解决问题,请尽可能帮助我。 我正在实现一个MVC应用程序,该应用程序使用EF +存储库模式+工作单元和Autofac作为dependency injection器。 我能够使用一个DbContext类,但我面临的情况是我需要使用另一个DbContext实例(使用其他用户凭据访问另一个数据库) 让我更好地解释一下:我有来自数据库A的EntityA(并且有一个DatabaseA_Context类)。 所以我需要一个EntityB,它来自数据库B(带有自己的DatabaseB_Context类)。 当我使用AutoFac注册它们时,只会在GenericRepository实现上注入最后配置的依赖项。 我已经发现文章说Autofac用最后一个值覆盖了注册。 我已经发现其他文章显示我是否在UnitOfWork构造函数上传递了IEnumerable,我能够看到它的所有注册类型,但我想要一个特定的类型。 我清楚了吗? 我的代码如下: 我的控制器: public class MyController : Controller { private readonly IBaseBLL _aBLL; private readonly IBaseBLL _bBll; public MyController(IBaseBLL aBLL, IBaseBLL bBLL) { _aBLL = aBLL; _bBLL = bBLL; } } 我的业务层 public interface IBaseBLL where T : class { T Select(Expression<Func> predicate); T AddT […]

存储库和工作单元 – 负责什么?

在过去一周左右的时间里,我一直在阅读很多关于存储库模式的文章和教程。 许多文章将存储库模式与工作模式单元紧密联系在一起。 在这些文章中,我通常会找到与此类似的代码: interface IUnitOfWork { void RegisterNew(TEntity entity); void RegisterDirty(TEntity entity); void RegisterDeleted(TEntity entity); void Commit(); void Rollback(); } interface IRepository { TEntity FindById(TKey id); IEnumerable FindAll(); void Add(TEntity entity); void Update(TEntity entity); void Delete(TEntity entity); } class Repository : IRepository { public Repository(IUnitOfWork context) { this.context = context; } private IUnitOfWork context; public […]

你能在nhibernate的一个会话中发生多个事务吗? 这是一个坏主意吗?

我正在考虑为NHibernate持久层创建自己的IUnitOfWork实现。 似乎正确的方法是在构造函数中实例化ISession和ITransaction ,然后在析构函数或Dispose()方法中进行Dispose() 。 当然,如果有人调用Save()方法,那么ISession将被刷新并且ITransaction将完成,因此在调用Save() ,将再次没有有效的打开事务来Save() …除非我提交了第一笔交易并立即开启了另一笔新交易。 但这是个好主意吗? 在设计方面,进行一次提交操作是有意义的,但我不一定能控制代码,而其他开发人员可能对遵循UnitOfWork模式不那么严格。 通过尝试使UnitOfWork容忍每个会话的多个事务,我会失去/获得任何东西吗? 我应该检查一个打开的事务,如果它已经被提交则抛出exception,而不是进行新的事务吗?

entity framework的存储库+ UnitOfWork模式

我上下搜索网络,我没有找到适合我的应用程序的设计。 我正在寻找Repository + UnitOfWork模式,它将管理连接并在完成后自动处理它们。 我需要支持Web应用程序,其中每个请求都有自己的UnitOfWork和Windows应用程序,其中每个线程都有自己的UnitOfWork。 我需要模式自动处理UnitOfWork请求/线程完成。 我也想在exception的情况下支持rolback。 现在我使用StructureMap所以我不想继续在建议答案中使用它。 我需要Repository模式的原因是为了实现我所有实体所需的所有能力。 我需要UnitOfWork的原因是允许更多的实体更改。 我真的很乐意帮助你。 谢谢。

我应该使用带有Entity Framework 5的通用存储库吗?

我目前正在使用具有通用存储库和工作单元模式的entity framework。 我的模型类似于本文中描述的模型 我过去曾使用Generic Repositories,并且非常享受它可以提供的全局function。 但是,在将它与Entity Framework一起使用时,我似乎每天都遇到更多问题。 在处理父/子/交汇关系时,这些问题似乎更多。 使用带有EF的通用存储库开始在我的口中留下不好的味道,我开始认为使用带有EF的通用存储库是错误的方法。 有人可以帮助引导我朝正确的方向发展吗?

具有多个edmx的entity framework

假设我在我的数据库中有多个数据库模式,例如:HumanRessources和Inventory。 在每个架构中包含多个表。 您是否经常将数据库拆分为多个edmx,或者通常只将所有内容放在一个edmx中? 我正在考虑为每个模式创建一个edmx,但想知道这将如何影响unitorwork模式。 通过阅读一些文章,ObjectContext将成为单位工作。 通过定义2个edmx,我将得到2个ObjectContext:HumanRessourceContext和InventoryContext,这意味着每个将是一个单元工作。 如果我希望对人力资源中的实体和库存上下文中的实体进行的所有修改都是ATOMIC,那么这可以通过单元模式来实现吗?