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

C# 如何在prism wpf模块化应用程序中首先使用代码动态创建db表?,c#,wpf,entity-framework,sqlite,prism,C#,Wpf,Entity Framework,Sqlite,Prism,我正在使用prism构建一个带有可插拔模块的模块化应用程序 我已经在一个单独的项目中成功地使用EF设置了sqlite,该项目将包含在每个模块中 但是 我希望我的模块有一个“Model”文件夹,其中只包含它所需的类,这样,当wpf shell加载时,系统将为它创建db表(如果它们已经不存在的话) 如何在运行时将模型类“注入”到DbContext类中,就像在UnityContainer中注册视图和viewmodels一样?T4(文本模板转换工具包)是一个工具,您可以使用它从模型类自动生成DbCont

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

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

但是

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

如何在运行时将模型类“注入”到
DbContext
类中,就像在UnityContainer中注册视图和viewmodels一样?

T4(文本模板转换工具包)是一个工具,您可以使用它从模型类自动生成DbContext

我不会编写整个代码示例,因为在下面的链接中我们已经有了一个很好的示例:

如何将模型类“注入”到 运行时,比如我向UnityContainer注册视图和视图模型时

T4与此类似,您可以使用现有类(模型)中的所有数据库集生成DbContext:

此方法将扩展DbConext,并在Complie Time中添加类动态(反射)的“Model”文件夹

1) 使用T4生成DbContext类

2) 使用反射加载您的模型实体(检索模型类名,您可以使用它们在步骤3中创建数据库集)

3) 使用T4,从加载的实体生成数据库集(步骤2),并将它们添加到DbContext中

[可选]
如果您想用T4生成实体和DbContext,那么可以看看这个项目


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

看看这是否有帮助:为什么没有许多小型数据库上下文?并且只在给定模块中使用您需要的工具?我们在一个大型模块化项目中工作,我们通过:-删除模型生成器并创建实用程序来生成模型的SQL脚本来解决此问题。-我们也处理了移民问题以及作为基于模块上下文的基本上下文。