Tag: 工作单元

entity framework6代码优先 – 存储库实施是否好?

我即将实施一个entity framework6devise与存储库和工作单元。 有太多的文章,我不知道什么是最好的build议是:例如,我真的喜欢这里实现的模式:由于在这里的文章中build议的原因 但是, Tom Dykstra (Senior Programming Writer on Microsoft's Web Platform & Tools Content Team)build议,应该在另一篇文章中做: 我订阅Pluralsight ,而且每次在课程中使用时都会以稍微不同的方式实现,所以selectdevise是困难的。 有些人似乎认为这个工作单元已经在DbContext中实现了,所以我们根本就不需要去实现它。 我意识到这种types的问题已经被问过,这可能是主观的,但我的问题是直接的: 我喜欢第一个(Code Fizzle)文章中的方法,想知道它是否可以更容易维护,并且可以像其他方法一样易于testing,并且可以安全地继续使用? 任何其他意见都是值得欢迎的。

工作单位+存储库模式:商业交易概念的下降

Unit of Work和Repository Pattern是当今相当普遍的用法。 正如马丁·福勒( Martin Fowler) 所言 ,使用物UoW的目的是形成一个商业交易,同时UoW知道存储库实际上是如何工作的(持续的无知)。 我已经回顾了许多实现; 并忽略具体的细节(具体/抽象类,接口……),它们或多或less类似于下面的内容: public class RepositoryBase<T> { private UoW _uow; public RepositoryBase(UoW uow) // injecting UoW instance via constructor { _uow = uow; } public void Add(T entity) { // Add logic here } // +other CRUD methods } public class UoW { // Holding one repository […]

寻找一个像InRequestScope一样的Ninject范围

在我的服务层上,我在构造函数中注入了一个UnitOfWork和2个存储库。 工作单元和存储库有一个DbContext实例,我想在它们之间共享。 我怎样才能和Ninject做到这一点? 应考虑哪个范围? 我不在一个Web应用程序,所以我不能使用InRequestScope 。 我尝试做类似的事情……而我正在使用DI,但是,我需要我的UoW来Dispose d并创build它。 using (IUnitOfWork uow = new UnitOfWorkFactory.Create()) { _testARepository.Insert(a); _testBRepository.Insert(b); uow.SaveChanges(); } 编辑:我只是想确定我明白…后看看https://github.com/ninject/ninject.extensions.namedscope/wiki/InNamedScope我虽然关于我当前的控制台应用程序架构,实际上使用Ninject。 让我们说: A类是一个服务层类 B类是一个工作单元,它将一个接口(IContextFactory) C类是一个存储库,它将一个接口(IContextFactory) 这里的想法是能够在2个或更多的资源库上进行上下文操作,并使用工作单元来应用这些变化。 D类是一个上下文工厂(Entity Framework),它提供了一个在B类和C类之间共享的上下文的实例(保存在容器中),也可以用于其他的存储库。 上下文工厂保存在他的容器中的实例,所以我不想重复使用这个实例所有的名字,因为上下文需要被放置在服务operaiton的末尾..这实际上是InNamedScope的主要目的? 解决的办法是,但我不确定我是否做得对,服务实例会变成这样,这意味着他们实际上从来没有处置? : Bind<IScsContextFactory>() .To<ScsContextFactory>() .InNamedScope("ServiceScope") .WithConstructorArgument( "connectionString", ConfigurationUtility.GetConnectionString()); Bind<IUnitOfWork>().To<ScsUnitOfWork>(); Bind<IAccountRepository>().To<AccountRepository>(); Bind<IBlockedIpRepository>().To<BlockedIpRepository>(); Bind<IAccountService>().To<AccountService>().DefinesNamedScope("ServiceScope"); Bind<IBlockedIpService>().To<BlockedIpService>().DefinesNamedScope("ServiceScope");

为什么在这个例子中使用PerThreadLifetimeManager?

我正在关注下面的例子来设置统一与我的服务层一起工作。 我的项目设置与本文中的非常相似,除了为什么在注册服务依赖项时使用PerThreadLifetimeManager,我明白了一切。 请记住,我也在使用我的服务层中使用的通用存储库和unitofwork。 大多数统一的例子使用默认(瞬态)生存期pipe理器,因为我的设置类似于下面的我想知道为什么我应该使用PerThreadLifeimeManager? 如果改变了任何东西,我正在为当前表示层使用ASP.NET Web窗体项目。 container.RegisterType<ICatalogService, CatalogService>(new PerThreadLifetimeManager()) 在asp.net MVC 3中使用EF代码第一个dependency injection的存储库模式

以使用知识库的工作模式为单位进行dependency injection

我想要创build一个工作单元类,以类似的方式围绕存储库。 我遇到的问题是试图通过用IRepository接口replace示例中的通用存储库来实现dependency injection。 在链接文章中的uow中,他们使用getter来检查版本库是否被实例化,如果没有,则实例化它。 public GenericRepository<Department> DepartmentRepository { get { if (this.departmentRepository == null) { this.departmentRepository = new GenericRepository<Department>(context); } return departmentRepository; } } 这是强烈耦合。 我可以看到两个方面。 使用构造函数注入。 使用setter注射。 1的问题是,如果我注入所有的存储库,我不得不实例化每个存储库,即使我没有在特定的工作单元中使用它们。 因此招致这样做的开销。 我想象的是使用一个数据库范围内的工作单元,所以这会导致大量的不必要的实例化和巨大的构造函数。 2的问题是很容易忘记设置和结束空参考例外。 在这种情况下是否有任何的最佳做法? 还有其他的select我错过了吗? 我只是进入dependency injection,并已经做了所有的研究,我可以find关于这个话题,但我可能会失去一些关键。

UnitOfWork和GenericRepository模式是否冗余在EF 4.1代码中?

想知道是否需要使用Genericrepository模式和UnitOfWork模拟知识库。我正在使用MOQ.Is现在是多余的,因为我已经注意到,EF 4.1有IDBSet。 我还没有想出如何写通用的IDBSet通用。如果你有一个例子,你实现IDBSet你可以显示给我? 有什么build议么?

通用库与EF 4.1有什么关系

当我更深入地了解DbContext,DbSet和相关的接口时,我想知道为什么你需要围绕这些实现实现一个单独的“Generic”存储库? 它看起来像DbContext和IDbSet做你需要的一切,包括DbContext里面的“工作单位”。 我在这里错过了什么东西,或者似乎人们喜欢没有理由再添加一层依赖。