在一个上下文中组合Code First表和现有表?

时间:2016-02-23 16:18:44

标签: c# entity-framework-6 ef-migrations

我的SQL数据库中有几个表,它们是使用Code First和Migrations从POCO对象生成的。我还有一个不同Schema中的几个表,这些表是由另一个进程在项目外部创建的。

如何在一个数据库上下文中组合这两组表,而不会丢失代码的第一个迁移功能,而不会覆盖第二个模式中的现有表?

2 个答案:

答案 0 :(得分:2)

实际上非常简单。创建或反向设计其他模式POCO。添加所需的任何流畅配置(或从逆向工程类中获取)

public virtual DbSet<OtherSchemaTable> OtherSchemaTable {get; set; }'
...

创建新的迁移以替换快照,但不更新数据库:

add-migration OtherSchemaAdded -IgnoreChanges
update-database

现在,您可以继续进行表的迁移并引用其他模式。只要您不更改其他模式模型,您就可以了。如果您对此感到担心,另一个选择是使用数据库视图来引用其他模式表(假设不需要更新)。

答案 1 :(得分:0)

这意味着您必须接管迁移过程。我不确定EF团队目前是否支持从迁移过程中豁免某些实体(至少不是直接)。也许您可以使用您定义的自定义属性来处理相关实体。然后覆盖默认的SqlGenerator以忽略具有此Attribute的实体,因此不会为它们发出CREATE TABLE语句。