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

Mysql 实体框架:添加新对象并通过导航属性链接到第二个新对象,mysql,entity-framework,Mysql,Entity Framework,我有一个场景,我正在创建两个通过导航属性(外键)链接的新对象,例如: 当我试图保存时,通过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 (`clie

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

当我试图保存时,通过
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对象分配给ClienteMailAddresss对象时,它没有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。

是否自动生成
客户端帐户
id?是的。这是一个MySQL自动增量。在你的例子中,“客户端”是导航属性吗?是的,它是导航属性。谢谢你,我相信这就是我想要的答案;虽然这对我不起作用,但我相信这与MySQL/Connector不支持未签名外键列有关。
        ClientAccount client = new ClientAccount {
            ......
            AccountTypeId = 1
        };

        ClientEmailAddress email = new ClientEmailAddress {
            Client = client,
            EmailAddress = "test@test.com"
        };

       client.FkClientEmailAddresses.Add(email);