Asp.net mvc 实体框架-如何在不知道主键的情况下添加相互引用的实体

Asp.net mvc 实体框架-如何在不知道主键的情况下添加相互引用的实体,asp.net-mvc,entity-framework,insert,Asp.net Mvc,Entity Framework,Insert,我对实体框架非常陌生,所以如果这是一个非常糟糕的问题,我深表歉意,但我找不到对我有意义的解决方案。虽然我的问题很复杂,但我会尽量简化它。假设我有两个模型公司和公司地址 +--------------------Company---------------------------------------+ | int CompanyId | string CompanyName | | virtual <ICollection>CompanyAddress address // Nav

我对实体框架非常陌生,所以如果这是一个非常糟糕的问题,我深表歉意,但我找不到对我有意义的解决方案。虽然我的问题很复杂,但我会尽量简化它。假设我有两个模型公司和公司地址

+--------------------Company---------------------------------------+
| int CompanyId
| string CompanyName
|
| virtual <ICollection>CompanyAddress address // Navigation Property
+-------------------------------------------------------------------+
可以看出,公司实体可以有多个公司地址。在我的ASP.NET MVC项目中,我还使用了ViewModel

+--------------------CompanyCreateViewModel----------------+
| Company company
| CompanyAddress address
+---------------------------------------------------------+
这两个属性在视图中填充,并毫无问题地传递给控制器。我的问题现在开始了。如何插入这两个实体

假设我先插入公司实体,然后用select语句获取它的primaryKey,并将这个值赋给CompanyAddress的外键,然后插入它。但是,这对我来说没有意义,因为我需要对主键发出另一个请求


如何插入实体,最好的方法是什么?很抱歉提出了这么长的问题,谢谢。

一旦您为公司调用SaveChanges(),您就拥有了该对象中的PrimaryKey。将其分配给CompanyAddress的外键,然后再次调用SaveChanges()。

我不理解您所说的“但是,这对我来说没有意义,因为我需要对主键发出另一个请求。”-为什么您认为需要对同一主键发出另一个请求?为公司调用SaveChanges()后,该对象中就有了PrimaryKey。将其分配给CompanyAddress的外键,然后再次调用SaveChanges()。嗯,我不知道。正如我所说的,我对orm和ef是非常陌生的。不管怎样解决了我的问题:)请写下来作为答案,这样我就可以接受了。谢谢…顺便说一句,这是个好方法吗?我想通过导航属性将地址分配给公司,然后将公司和地址实体插入到一起。而不是先插入公司,然后再插入地址?如果您的数据库设置正确,也可以这样做。这是一步,不是两步。哪个更有效:)
+--------------------CompanyCreateViewModel----------------+
| Company company
| CompanyAddress address
+---------------------------------------------------------+