我对EF Migrations如何处理我的存储库是通用的( IRepository<> )并且由我选择的依赖注入工具在运行时注入的情况感到困惑。您知道迁移使用三个元素更新/同步数据库:
您可以看到基本元素是Object上下文及其属性。如果公开没有dbset属性的Object上下文,则不会以正确的方式执行Migrations使用的过程。
我的解决方案包含以下项目:Core.Entities,Core.RepositoryInterfaces和Infraestructure.RepositoryEF,Infraestructure.DependencyResolution和UI.WebSite。
如您所知,当我需要时,会在类构造函数中注入存储库:
private IRepository<Product> _productrepo;
Public Test(IRepository<Product> productRepo)
{
_productRepo = productrepo;
}
问题是: 迁移如何更新数据库,因为我的Object上下文没有dbset&lt;&gt;属性(我的依赖工具在运行时注入这些存储库)?
感谢您的宝贵帮助。
答案 0 :(得分:1)
如果您有一个空的dbcontext对象(我的意思是没有dbset属性),我认为代码优先迁移不会更新您的模型。因此,处理这种情况的一种方法是使用存储库模式并将dbcontext objet注入每个请求的存储库:
设计两个dbcontext对象,一个用于开发时间(devdbcontext),另一个用于生产环境(proddbcontext)。
Devdbcontext 将使用dbset属性设计, 这样,迁移工作流程在开发时间内是正常的; 它将检测模型更改并重新创建数据库等。 当您处于DEBUG模式(#if DEBUG)
Proddbcontext 将是一个派生的dbcontext对象 dbset属性,将在您进入时选择 RELEASE模式(#if RELEASE)。用于更新生产数据库I 将生成DATABASE SCRIPT并设置数据库initilializer 为NULL。
您如何看待这个解决方案?