迁移到EntityFramework 5 - 基类抛出异常中的NotMapped属性

时间:2013-07-18 07:57:54

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

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

基本实体类

[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
    } 
}

如何解决这种情况?

1 个答案:

答案 0 :(得分:1)

我能够通过评论用户(基础)实体中的 NotMapped 属性来使其工作,而是使用下面给出的 Fluent API忽略

public class DonorContext : DbContext {

    protected override void OnModelCreating(DbModelBuilder modelBuilder) {

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

由于我只为继承实体提供了一些NotMapped属性,因此我可以避免上述解决方法。我希望忽略行为与NotMapped相同,并且使用one替换其他行为不会导致任何问题。