Entity Framework 4 - вставка «многие ко многим» - PullRequest
2 голосов
/ 02 ноября 2011

Я новичок в EF4 и пытаюсь вставить запись из отношения многие ко многим.Я получил 3 таблицы:

  • A (ID, описание)
  • B (ID, код)
  • AB (aID, bID) <- A и Bотношение </li>

Проблема в том, что когда я вызываю SaveChanges (), он выдает исключение и пытается вставить новую запись в B. Я не хочу этого, он должен просто добавить ссылку,Вот мой код:

var a = new A(){Description="Example"};

var b = context.B.Single(B => B.ID == paramID);

a.B.Add(b);

context.A.AddObject(a);

context.SaveChanges() <---- here it throws the exception

Из моего исследования приведенный выше код должен создать новую запись для A, создать связь между A и B и сохранить ее в таблице AB, верно?

Я что-то упустил?

РЕДАКТИРОВАТЬ:

Это исключение, которое я получаю:

Невозможно вставить значение NULL в столбец 'MIC', таблица'dbo.B';столбец не допускает пустых значений.INSERT завершается неудачей. \ R \ nОперация завершена.

Если вы заметили, я просто пытаюсь добавить ссылку «многие ко многим», чтобы не создавать новую запись в таблице B. Я даже пыталсяоставьте aB пустым, и он все равно выдаст исключение, описанное выше.

1 Ответ

2 голосов
/ 02 ноября 2011

Вы можете попробовать присоединить A к контексту перед добавлением B в коллекцию:

var a = new A { Description = "Example" };
var b = context.B.Single(B => B.ID == paramID);

context.A.AddObject(a);
a.B.Add(b);

context.SaveChanges();

К сожалению, у меня нет возможности проверить это сейчас, но я предполагаю, что при добавлении A в контекст, EF также устанавливает состояние объектов в коллекции B на Added. В этом случае это должно решить проблему.

В качестве альтернативы вы можете попробовать пойти по другому пути - добавить A в список B:

var a = new A { Description = "Example" };
var b = context.B.Single(B => B.ID == paramID);

b.A.Add(a);

context.SaveChanges();

Это похоже на более чистый подход в вашем случае.

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