我有一个场景,我正在创建两个通过导航属性(外键)链接的新对象,例如:
ClientAccount client = new ClientAccount {
......
AccountTypeId = 1
};
ClientEmailAddress email = new ClientEmailAddress {
ClientId = client.Id,
EmailAddress = "test@test.com"
};
client.FkClientEmailAddresses.Add(email);
当我尝试保存时,通过dbContext.SaveChanges();
,我得到一个例外:
Cannot add or update a child row: a foreign key constraint fails (`test`.`client_email_addresses`, CONSTRAINT `FK_client_email_addresses_client_accounts` FOREIGN KEY (`client_id`) REFERENCES `client_accounts` (`client_account_id`))
我认为这是因为ClientAccount对象在我将其分配给ClientEmailAdresss对象时没有ID。
任何人都可以确认我正在尝试做的事情是否可行?我宁愿没有多个.SaveChanges电话。
答案 0 :(得分:1)
你应该改用:
ClientAccount client = new ClientAccount {
......
AccountTypeId = 1
};
ClientEmailAddress email = new ClientEmailAddress {
Client = client,
EmailAddress = "test@test.com"
};
client.FkClientEmailAddresses.Add(email);
这将允许EF跟踪分配的客户端和电子邮件地址之间的引用,并且一旦从数据库返回真实ID,EF应该在您的电子邮件地址实体中正确设置FK。