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

时间:2011-08-02 15:32:02

标签: mysql entity-framework

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

            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电话。

1 个答案:

答案 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。