C# 忽略EF6代码优先映射(.NET4而不是.NET4.5)中的某些继承属性

C# 忽略EF6代码优先映射(.NET4而不是.NET4.5)中的某些继承属性,c#,entity-framework,.net-4.0,ef-code-first,mapping,C#,Entity Framework,.net 4.0,Ef Code First,Mapping,我首先在win表单项目中使用.NET4的EF6代码(我应该在win xp上交付项目,所以我不能用.NET4.5配置它) 我有一个BaseEntity类,所有其他实体都从该类继承: public abstract class BaseEntity { public int Id {get; set;} public int X {get; set;} public int Y {get; set;} } public class Calendar:BaseEntit

我首先在win表单项目中使用.NET4的EF6代码(我应该在win xp上交付项目,所以我不能用.NET4.5配置它)

我有一个BaseEntity类,所有其他实体都从该类继承:

public abstract class BaseEntity
{
    public int Id {get; set;}
    public int X {get; set;} 
    public int Y {get; set;} 
}  
public class Calendar:BaseEntity
{
    // properties    
}
如果不为每个实体编写以下代码,我如何忽略所有实体中的X,Y属性

   modelBuilder.Entity<Calendar>()
            .Ignore(t => t.X)
            .Ignore(t => t.Y)
modelBuilder.Entity()
.Ignore(t=>t.X)
.Ignore(t=>t.Y)

请注意,我无法使用
[NotMapped]
属性,因为我将EF6与.NET 4一起使用。

使用
EntityTypeConfiguration
s代替
modelBuilder.Entity


因此,我必须为每个实体创建映射类。我正在寻找一个解决方案,我写了一次,它适用于所有实体,如果可能的话。你最好每个实体都有映射类。创建它们需要一些时间,但是在那之后,如果您想要检查或修改特定的映射,找到它将变得更加容易。否则,我看不到任何可能性。唯一的替代方法是将属性转换为get/set方法。作为替代方法(get/set方法),您的意思是我将{get;set;}更改为get{return{field;}set{field=value}?编程实体框架:DbContext作者Julia Lerman,Rowan Miller,第6章:“类中可能有未映射到数据库的属性。根据约定,不同时具有setter和getter的属性将不会成为模型的一部分。这些也被称为瞬态属性“,所以如果我想同时拥有set和get,我认为这个解决方案不起作用等。EF从不映射方法。但这是一种可能的替代方法。如果您需要属性X和Y(例如数据绑定),它可能不起作用。那么您最好使用基类映射类。
abstract class BaseEntityMapping : EntityTypeConfiguration<BaseEntity>
{
    public BaseEntityMapping()
    {
        this.Ignore(t => t.X);
        this.Ignore(t => t.Y);
    }
}

class CalendarMapping : BaseEntityMapping
{
    public CalendarMapping()
    {
        // Specific mappings
    }
}
modelBuilder.Configurations.Add(new CalendarMapping());