Я пытаюсь добавить объект, созданный из классов модели данных сущности. У меня есть таблица под названием «Пользователи», которая превратилась в класс пользователя EDM. И у меня также есть таблица Pages, ставшая классом EDM. Эти таблицы имеют отношение внешних ключей, так что каждая страница связана со многими пользователями. Теперь я хочу иметь возможность добавлять страницу, но я не могу понять, как это сделать. Я получаю исключение nullreference для пользователей ниже. Я все еще довольно смущен этим, поэтому я уверен, что это простая ошибка, но я просто не могу понять, как это сделать.Внешние отношения ключей в Entity Framework
Также, кстати, компилятор требует, чтобы я задал PageID в инициализаторе объекта, даже если это поле установлено как автоматический идентификатор в таблице. Я делаю это правильно, просто устанавливая его на 0, ожидая, что он будет автоматически обновляться в таблице при сохранении или как мне это сделать?
Любая помощь оценена!
Метод в вопросе:
private Page GetPage(User currentUser)
{
string url = _request.ServerVariables["url"].ToLower();
var userPages = from p in _context.PageSet
where p.Users.UserID == currentUser.UserID
select p;
var existingPage = userPages.FirstOrDefault(e => e.Url == url);
if (existingPage != null)
return existingPage;
Page page = new Page()
{
Count = 0,
Url = _request.ServerVariables["url"].ToLower(),
PageID = 0, //Only initial value, changed later?
};
_context.AddToPageSet(page);
page.Users.UserID = currentUser.UserID; //Here's the problem...
return page;
}
Спасибо, но, к сожалению, это не сработает ... Во-первых, ваше выражение пытается назначить объект User для int (UserID). Поэтому я перешел на страницу.Users.UserID = _context.UserSet.First (u => u.UserID == currentUser.UserID) .UserID; Но это тоже не работает. Тем не менее noreference в части Users на странице. User.UserID. Я пытаюсь добавить новую строку страницы, а затем установить внешний ключ UserID на этой новой странице в текущие пользовательские объекты UserID (первичный ключ). Я что-то упустил? Очевидно, что коллекция пользователей новой страницы пуста, но что мне нужно сделать, чтобы добавить ее? – Anders
Извините; копировать/вставлять ошибку. Исправлена. Основываясь на вашем коде выше, «Пользователи» выглядят как один «Пользователь», а не коллекция. –
Вы правы, это не коллекция. Но почему его тогда называют «Пользователи» ...? Но это работает! Я исследовал еще немного, хотя и, например, здесь рекомендуется не делать этого следующим образом: http://www.codewrecks.com/blog/index.php/2009/02/18/entity-framework-relations-and-entitykey/ (по-видимому, из-за накладных расходов). Но альтернативный код действительно чрезмерно сложный, поэтому я предпочел бы пойти с вашим предложением. Вы все это принимаете? (Я использую EF 3.5 btw, 4.0 в этом отношении?). Спасибо за вашу помощь! – Anders