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

本文关键字:代码 动态 创建 数据库 prism wpf 模块化 应用程序 | 更新日期: 2023-09-27 17:57:08

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

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

我希望我的模块有一个"Model"文件夹,其中包含它只需要的类,这样,当由 wpf shell 加载时,系统将为它创建数据库表(如果它们已经不存在)。

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

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

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

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

https://www.paragon-inc.com/resources/blogs-posts/using-t4-to-generate-a-dbcontext-in-code-first

如何将我的模型类"注入"到 DbContext 类中 运行时就像我在 UnityContainer 注册视图和视图模型时一样?

这里的 T4 思想类似,您使用现有类(模型)中的所有 DbSet 生成 DbContext:

此配置将扩展 DbConext 并在 Complie Time动态添加带有类的"模型"文件夹(反射)。

1) 使用 T4 生成 DbContext 类

2) 使用反射加载模型实体(检索模型类名称,您可以在步骤 3 中使用它们来创建 DbSets)

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

[可选]
如果要使用 T4 生成实体和 DbContext,可以查看此项目。

https://github.com/coni2k/DbContextGeneratorWithCodeFirst

如果使用EF

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