Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在EntityFramework中建立一对一关系?_C#_Entity Framework - Fatal编程技术网

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

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分贝的电话似乎很愚蠢 请随意编

假设我有两个表,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])标记您的数据库相关问题。如果可以提供特定于数据库的解决方案,就可以这样做。太棒了//柱长