我有一个场景,我要创建两个通过导航属性(外键)链接的新对象,例如:
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对象在我将其分配给clientemailaddress对象时没有ID。
谁能证实我正在做的事情是否可行?我不希望有多个。savechanges调用
你应该用这个代替:
ClientAccount client = new ClientAccount {
......
AccountTypeId = 1
};
ClientEmailAddress email = new ClientEmailAddress {
Client = client,
EmailAddress = "test@test.com"
};
client.FkClientEmailAddresses.Add(email);
这将允许EF跟踪指定的客户端和电子邮件地址之间的引用,一旦从数据库返回真实id, EF应该正确地在您的电子邮件地址实体中设置FK。