0

我正在将应用程序从 Entity Framework June 2011 CTP 迁移到 Entity Frameowrk 5 (.net 4.5)。我删除了 2011 年 6 月 CTP 的所有 EF 引用,并在 Visual Studio 2012 中添加了 EF 5 的引用。修复了一些命名空间错误后,应用程序编译正常。但是当我尝试运行应用程序并访问数据时出现异常。发生异常是因为我在基实体类中具有NotMapped 属性。以下是相关实体(基础和派生)。

基实体类

[Table("Users")]
[Serializable]
public abstract class User {
    [Key]
    public long Id { get; set; }

    // Other Properties omitted

    [NotMapped]
    public string StringVersion {

    }
}        

派生实体类

[Table("Donors")]
[Serializable]
public class Donor : User {
    ...
}

当应用程序尝试访问数据时,会抛出 InvalidOperationException 并显示以下消息

You cannot use Ignore method on the property 'StringVersion' on type 'Donor' because 
this type inherits from the type 'User' where this property is mapped. To exclude 
this property from your model, use NotMappedAttribute or Ignore method on the base type.

我尝试根据http://entityframework.codeplex.com/workitem/481中描述的解决方法解决问题,但仍然抛出异常。具体来说,我使用了以下代码,以便在捐赠实体之前发现用户。

public class DonorContext : DbContext {

    protected override void OnModelCreating(DbModelBuilder modelBuilder) {
        //Change for EF 5 
        modelBuilder.Entity<User>();
        //

        //Other Fluent API code follows
    } 
}

我该如何解决这种情况?

4

1 回答 1

1

我可以通过在用户(基本)实体中注释NotMapped属性来使其工作,而不是使用Fluent API Ignore,如下所示。

public class DonorContext : DbContext {

    protected override void OnModelCreating(DbModelBuilder modelBuilder) {

        //Added for EF 5 
        modelBuilder.Entity<User>().Ignore(u => u.StringVersion);
    }
}

由于继承实体只有几个 NotMapped 属性,因此我可以摆脱上述解决方法。我希望 Ignore 行为与 NotMapped 相同,并且使用一个代替另一个不会导致任何问题。

于 2013-07-18T13:50:13.930 回答