Нужно ли мне .SaveChanges (), чтобы получить идентификатор для внешнего ключа? - PullRequest
3 голосов
/ 19 июля 2011

В следующем коде я сохраняю нового человека, а затем собираю его идентификатор для использования в качестве FK в соответствующей записи адреса. PK определяются как идентифицирующие столбцы в БД. Мой вопрос, нужно ли мне вызывать dc.SaveChanges (); после добавления человека в набор объектов? Есть ли способ избежать поездки в БД для получения идентификатора, а затем передать его по адресу как 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();

Ответы [ 2 ]

6 голосов
/ 19 июля 2011

Нет способа получить 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();

Вот и все.

0 голосов
/ 19 июля 2011
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();

В вашем примере вместо сохранения и добавления идентификатора добавьте ссылку на объект, затем сохраните один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...