我一直在使用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有一定的依赖性 - 但是我无法弄清楚为什么迁移试图为它们生成数据库代码 - ,特别是因为它们不是我的一部分上下文
之前有人碰到过这个吗?我即将开始试错练习,试图找到问题的根源。
答案 0 :(得分:0)
EF应该只选取源自DbContext的对象图中的类 - 因此,如果类A在您的上下文中,并且类A具有类型为UnusedClass的属性,则EF将尝试使用它来构建它。
您可以将NotMappedAttribute添加到属性或类中,以便在生成映射时让EF忽略它。