0

我刚刚着手将项目从 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 声称NotMappedSystem.ComponentModel.DataAnnotations.Schema.NotMapped

如何防止 EF 5 选择不存在的列?

4

2 回答 2

1

添加这个

using System.ComponentModel.DataAnnotations.Schema
于 2012-08-17T04:42:23.947 回答
0

哦!

我今天也更新到 VS 2012。与生成后事件无关的事情发生了,这导致包含基类的程序集的早期版本可用于派生类。修复构建后事件解决了该问题。

于 2012-08-16T00:27:25.033 回答