我刚刚着手将项目从 Entity Framework 4.3.1 和 .NET 4 更新到 Entity Framework 5.0 和 .NET 4.5。我首先更新了 .NET 版本,并确保我引用的是 EF 5.0.0.0 而不是 .NET 4 兼容的 4.4.0.0。
我有一个类结构
public class MyBase
{
[NotMapped]
public bool MyProperty { get; set; }
}
public class MyDefinition : MyBase
{
// Some other properties
}
当我尝试加载一些 MyDefinition 实例时
using (MyContext ctx = new MyContext())
{
ctx.Configuration.AutoDetectChangesEnabled = false;
ctx.Configuration.LazyLoadingEnabled = false;
ctx.Configuration.ProxyCreationEnabled = false;
var defs = from def in ctx.MyDefinitions.AsNoTracking() select def;
foreach (MyDefinition def in defs) // <-- Exception here
{
// Do stuff
}
}
我得到一个 SqlException
列名“MyProperty”无效。
就好像为了确定现有模式是否有效而尊重NotMapped ,但 EF 5 生成的 SELECT 期望有一个MyProperty列。
基类和派生类在不同的程序集中定义。这两个程序集都经过仔细检查,以确保它们引用 EF 5.0.0.0 并以 .NET 4.5 为目标。
Intellisense 声称NotMapped是System.ComponentModel.DataAnnotations.Schema.NotMapped
如何防止 EF 5 选择不存在的列?