实体框架 - 为外部装配中的实体添加迁移创建

时间:2014-01-21 10:52:33

标签: entity-framework ef-migrations

我一直在使用Entity Framework Code First迁移一段时间,并且认为我非常了解基础知识。然而,昨天我遇到了一个相当奇怪的问题,我似乎无法找到解决方案。

我添加了对DLL的引用(第三方 - 不是我们自己开发的),它在我的实体上有一些我需要的接口。 DLL包含许多其他东西 - 比如某些类 - 我们不需要也不使用它们。

现在有了引用,并实现了一些接口 - 当我使用Add-Migration命令添加迁移时,Entity Framework似乎拿起了DLL中的一些类,并尝试在它们中为它们创建表。迁移。

例如,我的项目中有一个“用户”实体。我添加了对ThirdParty.dll的引用,其中包含一个IThirdPartyUser接口。 DLL还包含一个UnusedClass,我没有使用它 - 它不是我的上下文的任何方式

当我创建迁移时,我获得了为UnusedClass创建数据库表的代码。例如:

         CreateTable(
            "dbo.UnusedClass",
            c => new
                {
                    Id = c.Int(nullable: false, identity: true),
                    RegistrationNumber = c.Int(),
                })

现在我的理论是这个外部程序集(错误地)对Entity Framework有一定的依赖性 - 但是我无法弄清楚为什么迁移试图为它们生成数据库代码 - ,特别是因为它们不是我的一部分上下文

之前有人碰到过这个吗?我即将开始试错练习,试图找到问题的根源。

1 个答案:

答案 0 :(得分:0)

EF应该只选取源自DbContext的对象图中的类 - 因此,如果类A在您的上下文中,并且类A具有类型为UnusedClass的属性,则EF将尝试使用它来构建它。

您可以将NotMappedAttribute添加到属性或类中,以便在生成映射时让EF忽略它。