Кажется, это должно быть совершенно очевидно, но что-то в структуре сущностей сбивает меня с толку, и я не могу заставить это работать.
Проще говоря, у меня есть три таблицы, в которых значения Id являются столбцами идентификаторов:
Пользователи (userId, username)
Категории (categoryId, categoryName)
Составной элемент JoinTable (UserId, CategoryId).
В конструкторе сущностей (это .net 4.0), когда я импортирую эти таблицы, как и ожидалось, таблица соединения не появляется, но пользователи и категории показывают связь. Следующий код:
var _context = new MyContext();
var myUser = new User();
myUser.UserName = "joe";
var myCategory = new Category();
myCategory.CategoryName = "friends";
_context.Users.AddObject(myUser);
myUser.Categories.Add(myCategory);
var saved = _context.SaveChanges();
Возвращает ошибку (хотя в базу данных ничего не добавлено):
An item with the same key has already been added.
Если я добавлю следующее перед сохранением:
_context.Categories.AddObject(myCategory);
myCategory.Users.Add(myUser);
Я получаю ту же ошибку и ничего не сохраняется в БД. Если я сохраню объекты myUser и myCategory до того, как попытаюсь их связать, они оба сохранятся, но при втором сохранении выдается ошибка, и в таблицу соединений ничего не добавляется:
Cannot insert the value NULL into column 'UserId', table '...dbo.JoinTable'; column does not allow nulls. INSERT fails. The statement has been terminated.
Я явно не понимаю, сколько вставлено много отношений. Чего мне не хватает?