Sql 如何在一次操作中使用带有外键查找的实体框架插入记录?

Sql 如何在一次操作中使用带有外键查找的实体框架插入记录?,sql,entity-framework,ef-code-first,Sql,Entity Framework,Ef Code First,假设我想插入一辆品牌为的新车: public class Car { public int Id {get;set;} public string Name {get;set;} public MakeId {get;set;} } public class Make{ public int Id {get;set;} public string Name {get;set;} } 现在让我们假设我有了我想插入的汽车品牌的名称。我不想对make进行查询以检索mak

假设我想插入一辆品牌为的新车:

public class Car {

 public int Id {get;set;}
 public string Name {get;set;}
 public MakeId {get;set;}

}

public class Make{

 public int Id {get;set;}
 public string Name {get;set;}     

}
现在让我们假设我有了我想插入的汽车品牌的名称。我不想对make进行查询以检索make id,然后再进行新查询以插入汽车。我希望EF能生产出如下产品:

INSERT INTO Cars (Name, MakeId)
 SELECT @name, m.Id FROM Makes m WHERE m.Name = @makeName

这是可能的,还是直接转到ADO.NET?

这是不可能的。您只能通过将外键属性
Car.MakeId
设置为
Make
的有效键值,或将导航属性
Car.Make
设置为再次具有有效键值的
Make
实体,来创建从
Car
Make
的关系。在这两种情况下,您都需要知道要分配给
汽车的
Make
的主键值
Id
。知道任何其他属性(如
Make.Name
)都是不够的,即使数据库中的唯一键约束保证它是唯一的。

我认为您的SQL还将生成两个查询。