实体框架5生成SQL引用NotMapped属性

时间:2012-08-15 23:36:43

标签: entity-framework ef-code-first entity-framework-5

我刚刚开始将项目从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选择不存在的列?

2 个答案:

答案 0 :(得分:1)

添加此

using System.ComponentModel.DataAnnotations.Schema

答案 1 :(得分:0)

D'哦!

我今天也更新到了VS 2012。不相关的东西破坏了构建后的事件,这导致包含基类的程序集的早期版本可用于派生类。修复post build事件解决了这个问题。