2010-05-24 3 views
0

Я пытаюсь добавить объект, созданный из классов модели данных сущности. У меня есть таблица под названием «Пользователи», которая превратилась в класс пользователя 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; 
} 

ответ

1

Try:

page.Users = _context.Users.First(u => u.UserId == currentUser.UserID); 

По этому поводу:

Также, кстати, компилятор требует, чтобы я установил PageId в объекте инициализатор

Это не должно быть правдой. Каково точное сообщение об ошибке? Кроме того, каков тип идентификатора?

+0

Спасибо, но, к сожалению, это не сработает ... Во-первых, ваше выражение пытается назначить объект User для int (UserID). Поэтому я перешел на страницу.Users.UserID = _context.UserSet.First (u => u.UserID == currentUser.UserID) .UserID; Но это тоже не работает. Тем не менее noreference в части Users на странице. User.UserID. Я пытаюсь добавить новую строку страницы, а затем установить внешний ключ UserID на этой новой странице в текущие пользовательские объекты UserID (первичный ключ). Я что-то упустил? Очевидно, что коллекция пользователей новой страницы пуста, но что мне нужно сделать, чтобы добавить ее? – Anders

+0

Извините; копировать/вставлять ошибку. Исправлена. Основываясь на вашем коде выше, «Пользователи» выглядят как один «Пользователь», а не коллекция. –

+0

Вы правы, это не коллекция. Но почему его тогда называют «Пользователи» ...? Но это работает! Я исследовал еще немного, хотя и, например, здесь рекомендуется не делать этого следующим образом: http://www.codewrecks.com/blog/index.php/2009/02/18/entity-framework-relations-and-entitykey/ (по-видимому, из-за накладных расходов). Но альтернативный код действительно чрезмерно сложный, поэтому я предпочел бы пойти с вашим предложением. Вы все это принимаете? (Я использую EF 3.5 btw, 4.0 в этом отношении?). Спасибо за вашу помощь! – Anders

Смежные вопросы