Entity framework 4 我是否需要.SaveChanges()来获取外键的ID?

Entity framework 4 我是否需要.SaveChanges()来获取外键的ID?,entity-framework-4,Entity Framework 4,在下面的代码中,我保存了一个新的人,然后抓取该人的id作为关联地址记录中的FK。PK定义为数据库中的标识列。我的问题是,我需要调用dc.SaveChanges()吗;将人物添加到对象集中后?是否有任何方法可以避免访问db以获取ID,然后将其作为FK传递给地址?我可以将两个savechanges()滚动到一个操作中吗 PlaygroundEntities dc = new PlaygroundEntities(); Person person =

在下面的代码中,我保存了一个新的人,然后抓取该人的id作为关联地址记录中的FK。PK定义为数据库中的标识列。我的问题是,我需要调用dc.SaveChanges()吗;将人物添加到对象集中后?是否有任何方法可以避免访问db以获取ID,然后将其作为FK传递给地址?我可以将两个savechanges()滚动到一个操作中吗

            PlaygroundEntities dc = new PlaygroundEntities();

            Person person = new Person
                                {
                                    FirstName = txtFirstName.Text,
                                    LastName = txtLastName.Text
                                };

            dc.People.AddObject(person);
            dc.SaveChanges();

            Address address = new Address
                                  {
                                      PeopleId = person.Id,
                                      Address1 = txtAddress.Text,
                                      City = txtCity.Text,
                                      State = txtState.Text,
                                      ZipCode = txtZipCode.Text
                                  };

            dc.Addresses.AddObject(address);
            dc.SaveChanges();

只要person.Id是自动生成的密钥,就无法在没有查询的情况下检索person.Id。 但是,如果获取person.Id的目的只是创建地址,则不需要为person.Id添加地址,只需添加地址为的person,如下所示:

    Person person = new Person 
                    { 
                       FirstName = txtFirstName.Text, 
                       LastName = txtastName.Text, 
                       Address = new Address
                                 { 
                                    Address1=txtAddress.Text, 
                                    City=txtCity.Text, 
                                    State=txtState.Text, 
                                    ZipCode=txtZipCode.Text 
                                 }
                     }

dc.People.AddObject(person);
dc.SaveChanges();
就这样

Person person = new Person
    {
                                FirstName = txtFirstName.Text,
                                LastName = txtLastName.Text
                            };


        Address address = new Address
                              {
                                  People = person,
                                  Address1 = txtAddress.Text,
                                  City = txtCity.Text,
                                  State = txtState.Text,
                                  ZipCode = txtZipCode.Text
                              };

        dc.Addresses.AddObject(address);
        dc.SaveChanges();
根据您的示例,不是保存和添加id,而是添加对象引用,然后保存一次