如何在棱镜 wpf 模块化应用程序中首先使用代码动态创建数据库表?
How to dynamically create db tables with code first in a prism wpf modular app?
我正在使用 Prism 构建带有可插入模块的模块化应用程序。
我已经在每个模块中包含的单独项目中成功地使用 EF 设置了 sqlite。
但是
我希望我的模块有一个 "Model" 文件夹,只有它需要 classes,在某种程度上,当被 wpf shell 加载时,系统将创建数据库表(如果它们不存在)。
如何在运行时 "inject" 我的模型 class 进入 DbContext
class ,就像我使用 UnityContainer 注册视图和视图模型时一样?
T4(文本模板转换工具包)是一种工具,您可以使用它从您的模型自动生成 DbContext classes。
我不会写整个代码示例,因为我们已经在下面给定的 link 中提供了一个很好的示例:
https://www.paragon-inc.com/resources/blogs-posts/using-t4-to-generate-a-dbcontext-in-code-first
How can I "inject" my model classes into the DbContext class at
runtime like when I register views and viewmodels with UnityContainer?
这里的 T4 想法类似,您使用现有 classes(Model):
中的所有 DbSet 生成 DbContext
此方法将扩展 DbConext 并在 Complie Time[中添加具有 classes 动态(反射) 的 "Model" 文件夹.
1) 使用 T4 生成您的 DbContext class
2) 通过反射加载您的模型实体(检索模型 class 名称,您可以使用它们在步骤 3 中创建 DbSet)
3) 使用 T4 从加载的实体生成 DbSet(第 2 步)并将它们添加到 DbContext
[可选]
如果你想用T4生成实体和DbContext,你可以看看这个项目。
如果您使用 EF 6,您可以尝试 modelBuilder.RegisterEntityType(type); 在您的上下文中添加新实体,您可以处理迁移配置以添加您的实体。您也可以使用 modelBuilder.Configurations.AddFromAssembly(assembly); 将您的实体配置添加到您的上下文中。
我以这种方式有一个模块化的网络应用程序。
当我的 Web 应用程序启动时,我检查所有模块并将实体和共享实体添加到上下文(顺便说一句。一些模块有自己的上下文)并迁移对主数据库进行更改。
我正在使用 Prism 构建带有可插入模块的模块化应用程序。
我已经在每个模块中包含的单独项目中成功地使用 EF 设置了 sqlite。
但是
我希望我的模块有一个 "Model" 文件夹,只有它需要 classes,在某种程度上,当被 wpf shell 加载时,系统将创建数据库表(如果它们不存在)。
如何在运行时 "inject" 我的模型 class 进入 DbContext
class ,就像我使用 UnityContainer 注册视图和视图模型时一样?
T4(文本模板转换工具包)是一种工具,您可以使用它从您的模型自动生成 DbContext classes。
我不会写整个代码示例,因为我们已经在下面给定的 link 中提供了一个很好的示例:
https://www.paragon-inc.com/resources/blogs-posts/using-t4-to-generate-a-dbcontext-in-code-first
How can I "inject" my model classes into the DbContext class at runtime like when I register views and viewmodels with UnityContainer?
这里的 T4 想法类似,您使用现有 classes(Model):
中的所有 DbSet 生成 DbContext此方法将扩展 DbConext 并在 Complie Time[中添加具有 classes 动态(反射) 的 "Model" 文件夹.
1) 使用 T4 生成您的 DbContext class
2) 通过反射加载您的模型实体(检索模型 class 名称,您可以使用它们在步骤 3 中创建 DbSet)
3) 使用 T4 从加载的实体生成 DbSet(第 2 步)并将它们添加到 DbContext
[可选]
如果你想用T4生成实体和DbContext,你可以看看这个项目。
如果您使用 EF 6,您可以尝试 modelBuilder.RegisterEntityType(type); 在您的上下文中添加新实体,您可以处理迁移配置以添加您的实体。您也可以使用 modelBuilder.Configurations.AddFromAssembly(assembly); 将您的实体配置添加到您的上下文中。 我以这种方式有一个模块化的网络应用程序。 当我的 Web 应用程序启动时,我检查所有模块并将实体和共享实体添加到上下文(顺便说一句。一些模块有自己的上下文)并迁移对主数据库进行更改。