我正在使用prism来构建一个带有可插拔模块的模块化应用程序。
我已经在一个单独的项目中成功地使用EF设置了sqlite,以便包含在每个模块中。
BUT
我希望我的模块有一个“Model”文件夹,该文件夹只包含它所需的类,其方式是,当由wpf shell加载时,系统将为它创建db表(如果它们已经不存在)
如何在运行时将我的模型类“注入”DbContext
类,就像我使用UnityContainer注册视图和视图模型一样?
答案 0 :(得分:1)
T4(文本模板转换工具包)是一个工具,您可以使用它从您的Model类自动生成DbContext。
我不会编写整个代码示例,因为我们在下面的给定链接中已经有了一个很好的例子:
https://www.paragon-inc.com/resources/blogs-posts/using-t4-to-generate-a-dbcontext-in-code-first
如何将我的模型类“注入”到DbContext类中 运行时就像我用UnityContainer注册视图和视图模型一样?
这里的T4想法类似,你用现有类(Model)中的所有DbSets生成你的DbContext:
此apporach将扩展DbConext并在 Complie Time 中添加动态(反射)类的“Model”文件夹。
1)用T4生成你的DbContext类
2)使用反射加载模型实体(检索模型类名称,您可以使用它们在步骤3中创建DbSets)
3)使用T4从加载的实体生成DbSet(步骤2)并将它们添加到DbContext
[可选]
如果你想用T4生成实体和DbContext,那么你可以看看这个项目。
答案 1 :(得分:0)
如果您使用EF 6,您可以尝试使用 modelBuilder.RegisterEntityType(type); 在您的上下文中添加新实体,并且您可以执行迁移配置以添加您的实体。您还可以使用 modelBuilder.Configurations.AddFromAssembly(assembly); 将您的实体配置添加到您的上下文中。 我有这样一个模块化的Web应用程序。 当我的Web应用程序启动时,我检查所有模块并将实体和共享实体添加到上下文(顺便说一句,一些模块有自己的上下文),并迁移我们对主数据库的更改。