Entity Framework добавляет новую запись для свойства навигации - PullRequest
2 голосов
/ 31 марта 2012

У меня есть две сущности, определенные следующим образом:

public class Corporation
{
    public int Id{get;set;}
    public string Name{get;set;}
    public List<Location> Locations{get;set;} // All locations under this corp
}

public class Location
{
    public int Id{get;set;}
    public Corporation Corporation{get;set;} // Corporation is required in configuraion
}

Когда я пытаюсь добавить корпорацию, а затем местоположение, я получаю две корпорации.Один от моей функции, которая добавляет корпорацию (что хорошо), и один от функции, которая добавляет местоположение (что является проблемой).

Функция добавления местоположения выглядит следующим образом:

public void AddLocation(int locationId)
{
     using (Context context = new Context())
     {
          Location location = new Location();
          location.Corporation = GetCorporationFromDb(corpId);

          context.Locations.Add(location); // This one adds another same Corporation to DB
          context.SaveChanges();
     }
}

Как этого избежать?Я должен добавить Корпорацию перед Местоположением, потому что в реализации Местоположение вычисляет электронный код, используя идентификатор базы данных Корпорации.

1 Ответ

7 голосов
/ 31 марта 2012

Это происходит, если вы выбираете корпорацию из контекста данных, отличного от того, который вы используете для добавления местоположения. Попробуйте:

Context context = new Context();
Location location = new Location();
Corporation corporation = context.Corporations
    .Where(x => x.Id == corpId)
    .First();
location.Corporation = corporation;

context.Locations.Add(location);
context.SaveChanges();

Таким образом, вы используете тот же контекст для извлечения Corporation и добавления Location.

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