实体框架:添加新对象并通过导航属性链接到第二个新对象



我有一个场景,我要创建两个通过导航属性(外键)链接的新对象,例如:

            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。

最新更新