2012-01-26 43 views
6

我与EF 4.3(测试版)如何忽略EF 4.3迁移表/类

我有一些新的类应生成数据库表和列测试。

从一个旧项目我有我的架构中的一些旧表,我想通过EF访问。 声明所有类。为了访问旧表,有一个映射的poco。

db迁移也尝试创建旧表。

它如何设置该类/表不是迁移的一部分,而是ef模型的一部分?

xxx.OnModelCreating()  
{ 
    modelBuilder.Ignore<myOldTableClass>();  
} 

从模型中删除整个类。最后我不能用它通过dbContext进行访问。

我喜欢使用自动迁移。 我尽量避免将旧的数据库表完全迁移到EF类。 (是的,我知道那里有发电机) 有120个表,旧的应用程序仍在使用它。

仅与EF(新应用程序)一起使用的一些新表。 有3个常用的表格。 那些不应该创建,但通过ef访问。

回答

21

随着发布有内置在这种情况下支持EF 4.3.1。添加映射到数据库中现有表的类时,请使用-IngoreChanges切换到Add-Migration

这将生成一个空迁移,其中包含新添加的类的更新后的元数据签名。

通常这开始使用EF迁移的时候,因此“InitialMigration”的名称做:

Add-Migration InitialMigration –IgnoreChanges 
+0

这很棒,为我工作。 –

+0

我不明白从这个答案如何指定类名忽略。 –

+0

我不知道如果我们只想忽略一个特定的表(即现有的表可以跳过迁移),这可能会如何工作。 modelBuilder.Ignore ();没有任何意义,因为我们想要约束力。 – Spock

3

在这种情况下,正确的工作流程是在添加更改(新类)之前创建第一个迁移,而不是添加新类,然后创建新迁移,您将只有新表。

如果您迄今尚未使用迁移,则框架将为您在项目中拥有的所有表生成迁移,因为它认为您正在创建初始迁移。生成迁移后,您可以修改其源文件并从Up方法中删除旧类的CreateTable代码。 问题是您可能必须在随后的迁移中执行此操作。

编辑:我写了一个walkthrough添加迁移到现有项目与EF 4.3.1

+0

该表将被包括在该迁移的元数据,这样他们就不会在随后的迁移重新出现。 –

+1

@AndersAbel:是的。确实如此。我纠正了我的答案。 –

+0

这将与AutomaticMigrationEnabled = true一起使用吗? – Spock