[英]EF6 Code First: Inserting an inherited entity fails
我有一个名为Client
的实体,无法插入。 Client
从Person
继承人从Party
继承。
这是我的模型类:
public class Client : Person
{
public Client()
{
CrimeIncidents = new List<CrimeIncident>();
Reseller = new Reseller();
}
public virtual ICollection<CrimeIncident> CrimeIncidents
{
get;
set;
}
public virtual Reseller Reseller { get; set; }
}
public class Person : Party
{
[CustomValidation(typeof(PartyRoleCustomValidation), "ValidateRSAIDNumber")]
public string IDSocialSecurityPassNum { get; set; }
[DisplayName("Name")]
public string NickName { get; set; }
[DisplayName("Full names")]
public string FullNames { get; set; }
public string Surname { get; set; }
public Gender? Gender { get; set; }
[DisplayName("Date of birth")]
[DataType(DataType.Date)]
public string DOB { get; set; }
}
public class Party
{
public Int64 Id { get; set; }
public virtual PartyRole PartyRole
{
get;
set;
}
//public List<Address> Adresses { get; set; }
public virtual string PostalAddress { get; set; }
[DataType(DataType.PostalCode)]
public virtual string PostalCode { get; set; }
public virtual string PhysicalAddress { get; set; }
[DataType(DataType.PostalCode)]
public virtual string StreetCode { get; set; }
//public List<EmailAddress> EmailAdresses { get; set; }
[DataType(DataType.EmailAddress)]
public virtual string EmailAddress { get; set; }
//public List<ContactNumber> ContactNumbers { get; set; }
[DataType(DataType.PhoneNumber)]
public virtual string CellNumber { get; set; }
[DataType(DataType.PhoneNumber)]
public virtual string PhoneNumber { get; set; }
[DataType(DataType.PhoneNumber)]
public virtual string FaxNumber { get; set; }
}
这是单元测试,它在assert语句上失败(数据库中的手动检查确认了单元测试的结果):
[TestMethod]
public void AddClient()
{
JCGunsDbContext db = new JCGunsDbContext();
int initCount = db.Clients.Count();
string guid = Guid.NewGuid().ToString();
Client cl1 = new Client();
cl1.NickName = guid;
cl1.Surname = guid;
cl1.CellNumber = "0123456789";
cl1.EmailAddress = "test" + guid + "@test.com";
db.UserId = "SYSTEM_UNITTESTING";
db.Clients.Add(cl1);
db.SaveChanges();
Assert.IsTrue(db.Clients.Count() > initCount);
}
为什么此插件不起作用?如何解决?
如果此客户端连接到现有的Person,则需要将客户端的ID传递给客户端。 否则,您需要在client.Person
导航属性中添加Person对象。
例如
如果您将此客户端连接到现有的Person。
Client client = new Client();
client.Id = oldPerson.Id
如果您要使用新的Person添加新的客户端。
Client client = new Client();
client.Person = new Person(){......}
问题是Client
的构造函数中的以下语句:
Reseller = new Reseller();
经销商应该是可选的。 设置一个新的Reseller实例,该实例不遵循自己的带注释的验证标准,这会使SaveChanges方法失败而没有引发异常。 删除该语句可解决问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.