在一个上下文中组合 Code First 表和现有表?
Combining Code First tables and existing tables in one context?
我的 SQL 数据库中有几个表是使用代码优先和迁移从 POCO 对象生成的。我在不同的架构中也有几个表,它们是由另一个进程在项目外部创建的。
如何在不丢失代码优先迁移功能且不覆盖第二个架构中的现有表的情况下将这两组表合并到一个数据库上下文中?
这意味着您必须接管迁移过程。我不确定 EF 团队目前是否支持将某些实体从迁移过程中豁免(至少不直接)。也许您可以使用您定义的自定义属性来处理相关实体。然后覆盖默认的 SqlGenerator 以忽略具有此属性的实体,因此不会为它们发出 CREATE TABLE 语句。
其实很简单。创建或反向工程其他模式 POCO。添加任何需要的流畅配置(或从逆向工程中获取class)
public virtual DbSet<OtherSchemaTable> OtherSchemaTable {get; set; }'
...
创建一个新的迁移来替换您的快照,但不更新数据库:
add-migration OtherSchemaAdded -IgnoreChanges
update-database
现在您可以继续迁移表并引用其他架构。只要您不更改其他模式模型就可以。如果您担心这一点,另一种选择是使用数据库视图来引用其他模式表(假设不需要更新)。
我的 SQL 数据库中有几个表是使用代码优先和迁移从 POCO 对象生成的。我在不同的架构中也有几个表,它们是由另一个进程在项目外部创建的。
如何在不丢失代码优先迁移功能且不覆盖第二个架构中的现有表的情况下将这两组表合并到一个数据库上下文中?
这意味着您必须接管迁移过程。我不确定 EF 团队目前是否支持将某些实体从迁移过程中豁免(至少不直接)。也许您可以使用您定义的自定义属性来处理相关实体。然后覆盖默认的 SqlGenerator 以忽略具有此属性的实体,因此不会为它们发出 CREATE TABLE 语句。
其实很简单。创建或反向工程其他模式 POCO。添加任何需要的流畅配置(或从逆向工程中获取class)
public virtual DbSet<OtherSchemaTable> OtherSchemaTable {get; set; }'
...
创建一个新的迁移来替换您的快照,但不更新数据库:
add-migration OtherSchemaAdded -IgnoreChanges
update-database
现在您可以继续迁移表并引用其他架构。只要您不更改其他模式模型就可以。如果您担心这一点,另一种选择是使用数据库视图来引用其他模式表(假设不需要更新)。