我有这样的硕士基础班。
public class MasterTemplate
{
[Key]
public int Id { get; set; }
[StringLength(50)]
public string Code { get; set; }
[Required]
[StringLength(255)]
public string Description { get; set; }
public decimal? SortOrder { get; set; }
}
我有很多继承上述类的类。 例如,姓氏,国籍,货币等。
public class Nationality : MasterTemplate
{
// Other memebers of nationality
}
public class Caste: MasterTemplate
{
// Other memebers of caste
}
大多数类都需要所有列,但是我的一些类不需要“ Description”,其中一些不需要“ Code”,另一些不需要“ SortOrder”。
public class Zone: MasterTemplate
{
// Logic to mark Description [NotMapped],
// so that EF doesn't create a column in database
// Other memebers of zone
}
对于同一个类中的成员,我可以使用[NotMapped],但是如何从子类为父类属性执行此操作。我知道我可以删除继承并做到这一点,但很好奇是否有可能从子类为父类属性进行继承。
编辑:
由@IvanJazz表示,对代码进行了如下修改。
public class MasterTemplate
{
[Key]
public int Id { get; set; }
[StringLength(50)]
public virtual string Code { get; set; }
[Required]
[StringLength(255)]
public virtual string Description { get; set; }
public virtual decimal? SortOrder { get; set; }
}
public class Nationality : MasterTemplate
{
// Code will not appear in Nationality table
[NotMapped]
public override string Code { get; set; }
}
public class Zone : MasterTemplate
{
// Description will not appear in Zone table
[NotMapped]
public override string Description { get; set; }
}
现在,从逻辑上讲,实体框架在添加记录时不应该搜索覆盖并标记为NotMapped的属性。插入以下DbValidation时发生错误。不知道为什么实体框架仍在搜索未映射的属性。
答案 0 :(得分:3)
您可以使用virtual
和override
修饰符来获得所需的结果。在派生类中使用virtual
属性将所有可选属性标记为override
和[NotMapped]
。
public class MasterTemplate
{
[Key]
public int Id { get; set; }
[StringLength(50)]
public virtual string Code { get; set; }
[Required]
[StringLength(255)]
public virtual string Description { get; set; }
public virtual decimal? SortOrder { get; set; }
}
public class Nationality : MasterTemplate
{
// Code will not appear in Nationality table
[NotMapped]
public override string Code { get; set; }
}
public class Zone : MasterTemplate
{
// Description will not appear in Zone table
[NotMapped]
public override string Description { get; set; }
}