我刚刚开始将项目从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选择不存在的列?
答案 0 :(得分:1)
添加此
using System.ComponentModel.DataAnnotations.Schema
答案 1 :(得分:0)
D'哦!
我今天也更新到了VS 2012。不相关的东西破坏了构建后的事件,这导致包含基类的程序集的早期版本可用于派生类。修复post build事件解决了这个问题。