我将 EF 5 与代码优先方法一起使用。现在我尝试定义一个“代码”表,我希望在其中有几个不同的代码(如地址代码、介质代码等)。在这个表中,我只有以下属性:ID (Guid)、Name (String)、Description (String) 和一个鉴别器(在这种情况下,类似于代码的类型:地址代码、介质代码等)。
所以我定义了以下基类:
public abstract class Code : EntityBase
{
public string Name { get; set; }
public string Beschreibung { get; set; }
}
然后我从代码中派生了两个类
public class AddressCode : Code {}
public class MediumCode : Code {}
EntityBase 类是抽象的,只定义了 Id 属性,我们将它用于每个 POCO 类......
目标是我可以使用 AddressCode 作为我的地址 POCO 类的属性:
public class Adresse : EntityBase
{
#region Properties
public string Name1 { get; set; }
public virtual AddressCode AddressCode { get; set; }
#endregion
}
现在的问题是,我该如何解释 EF 如何做到这一点?任何人都可以帮忙吗?
谢谢马可
感谢您的回答!
我试着按照你说的去做。不幸的是,由于我的 EntityBase 类,我得到了一个错误:
public abstract class EntityBase
{
#region Properties
public virtual Guid Id { get; set; }
public virtual bool IsValid
{
get
{
{
return Validate();
}
}
}
[NotMappedAttribute]
public virtual IList<ValidationFailure> ValidationFailures { get; set; }
#endregion
#region Methods
private bool Validate()
{
var validatorFactory = new AttributedValidatorFactory();
IValidator validator = validatorFactory.GetValidator(GetType());
if (validator == null)
{
return true;
}
ValidationResult validationResult = validator.Validate(this);
ValidationFailures = validationResult.Errors;
return validationResult.IsValid;
}
#endregion
}
错误消息是:您不能对类型“Entities.AdresseCode”的属性“ValidationFailures”使用 Ignore 方法,因为此类型继承自映射此属性的类型“Entities.EntityBase”。要从模型中排除此属性,请对基本类型使用 NotMappedAttribute 或 Ignore 方法。
如您所见,我已经将属性 ValidationFailures 定义为 NotMapped 但我仍然收到此错误..您有什么想法吗?
谢谢马可