EF 4.1 - Невозможно связать одну сущность с другой существующей сущностью (NULL) - PullRequest
3 голосов
/ 15 декабря 2011

Я использую Entity Framework 4.1 (сначала базу данных, например, «старая школа»), и я использую POCO в веб-приложении ASP.NET MVC 3.

У меня есть 1 -0..1 отношения между Foo и Bar, подкрепленные nullable int в таблице Foo.

Мой POCO выглядит следующим образом:

public class Foo
{
   public Bar Bar { get; set; 
}

public class Bar
{
   public int BarId { get;set; }
}

Теперь у меня есть Foo, который уже существует в системе, но BarId является нулевым.

Теперь я пытаюсь связать это Foo с существующим Bar.

Вот код, который я получил:

var existingBar = _repo.GetBar(2);
var existingFoo = _repo.GetFoo(1);
existingFoo.Bar = existingBar;

Но за кулисами EF добавляет new Bar.Почему?

Я также попробовал это:

existingFoo.Bar = new Bar { BarId = 2 }; 

Например, «метод заглушки», но приводит к тому, что EF жалуется на пустые столбцы (потому что опять пытается создать «новый» бар).

Я уверен, что я делал это раньше - я просто надеюсь, что решение, которое я выбрал, не было "использовать SP".

Как я уже говорил - я 'Я использую POCO, поэтому у меня нет прямого доступа к DbContext или ObjectContext с моего контроллера.

Любой совет?

1 Ответ

3 голосов
/ 15 декабря 2011

Я подозреваю, что это потому, что

DbContext API и его DbChangeTracker не предоставляют способ изменить состояние независимой ассоциации (мы должны преобразовать DbContext обратно в ObjectContext и изменить состояние в ObjectStateManager).

Выше приведено цитата из сообщения в блоге Ладислава Мрнквы .Попробуйте определить свойство BarId в вашем классе Foo и посмотрите, не вызывает ли оно правильную работу контекста.

...