C# 如何在EntityFramework中建立一对一关系?
假设我有两个表,Person和Address,它们有一对一的关系(精确地说是一对一或一对零)。Person有一个Id字段,它是PK,Address有一个PersonId字段,它是PK/FK,与Person PK匹配。到目前为止还不错 我的问题是,我保存地址的同时,我保存人。个人的PK是自动生成的,所以我最终会这样做:C# 如何在EntityFramework中建立一对一关系?,c#,entity-framework,C#,Entity Framework,假设我有两个表,Person和Address,它们有一对一的关系(精确地说是一对一或一对零)。Person有一个Id字段,它是PK,Address有一个PersonId字段,它是PK/FK,与Person PK匹配。到目前为止还不错 我的问题是,我保存地址的同时,我保存人。个人的PK是自动生成的,所以我最终会这样做: 保存人员表字段 获取我刚刚从SQL保存的Person对象(另一个调用),并获取其生成的Id 使用我在步骤2中获得的Id保存地址表 有更好的方法吗?打3分贝的电话似乎很愚蠢 请随意编
请随意编辑标题,我不能用一句话概括问题 实体框架可以自己为您完成。 方法是,您需要填写您的个人实体以及您的地址实体 例如,您的个人实体模型是
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();
这里有两个直接的问题。第一,这在实体框架中是可能的吗?我不是通过直接SQL命令保存。第二,如果另一个用户同时插入一个人怎么办?这种控制器方法是异步的,可能会有成千上万的人使用它——虽然不太可能,但也有可能+不过我还是赞成这个想法。我通过PHP使用该命令,效果很好。2.如果您计划同时拥有这么多用户,那么我建议您坚持使用当前的使用方式。请使用您正在使用的适当RDBMS(如[sql server]或[mysql])标记您的数据库相关问题。如果可以提供特定于数据库的解决方案,就可以这样做。太棒了//柱长