如何在prism wpf模块化应用程序中首先使用代码动态创建db表?

时间:2016-07-15 10:08:29

标签: c# wpf entity-framework sqlite prism

我正在使用prism来构建一个带有可插拔模块的模块化应用程序。

我已经在一个单独的项目中成功地使用EF设置了sqlite,以便包含在每个模块中。

BUT

我希望我的模块有一个“Model”文件夹,该文件夹只包含它所需的类,其方式是,当由wpf shell加载时,系统将为它创建db表(如果它们已经不存在)

如何在运行时将我的模型类“注入”DbContext类,就像我使用UnityContainer注册视图和视图模型一样?

2 个答案:

答案 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,那么你可以看看这个项目。

https://github.com/coni2k/DbContextGeneratorWithCodeFirst

答案 1 :(得分:0)

如果您使用EF 6,您可以尝试使用 modelBuilder.RegisterEntityType(type); 在您的上下文中添加新实体,并且您可以执行迁移配置以添加您的实体。您还可以使用 modelBuilder.Configurations.AddFromAssembly(assembly); 将您的实体配置添加到您的上下文中。 我有这样一个模块化的Web应用程序。 当我的Web应用程序启动时,我检查所有模块并将实体和共享实体添加到上下文(顺便说一句,一些模块有自己的上下文),并迁移我们对主数据库的更改。