[英]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.