繁体   English   中英

如何在 EntityFramework 中建立一对一关系?

[英]How to set up a one-to-one relationship in EntityFramework?

假设我有两个表,Person 和 Address,它们具有一对一的关系(准确地说是一对一或一对零。)Person 有一个 Id 字段,它是 PK 并且 Address 有一个PersonId 字段,它是 PK/FK 并与 Person PK 匹配。 到现在为止还挺好。

我的问题是 - 我在保存人的同时保存地址。 人的 PK 是自动生成的,所以我最终这样做:

  1. 保存人员表字段。
  2. GET Person 对象我刚刚从 SQL 中保存(另一个调用),并获取其生成的 Id。
  3. 使用我在第 2 步中获得的 ID 保存地址表。

有一个更好的方法吗? 进行 3 db 调用似乎很愚蠢。

PS - 随意编辑标题,我无法用一句话概括 q。

实体框架自己为你做。 方法是,您还需要填写您的个​​人实体以及您的地址实体。

例如,您的 Person 实体模型是

public class Person{
    public int PersonId {get;set;}
    public string PersonName {get;set;}
    public Address PersonAddress{get;set;} 
   //You must have this field (PersonAddress) if you created model from
   // database having both the tables relations.
}

现在您的地址实体模型是

public class Address{
    public string City{get;set;}
    public string State {get;set;}
    public string Country{get;set;}
    public int PersonId{get;set;}
}

现在你要做的是,

将您的个人实体填写为

Person person = new Person();
person.Name = "ABC";
person.PersonAddress = new Address(){ City="DEF", State = "OPQ", Country="XYZ", /*Leave PersonId*/ };

将此实体保存在数据库中

 context.entity(person).state=EntityState.Added;
 context.SaveChanges();

这将同时保存实体、人员和地址,并且还将在其中建立关系。 您可以检查它是否会在地址字段中保存 PersonId。

对第二个插入的 PK/FK 使用此命令:

LAST_INSERT_ID();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM