2010-05-24 185 views
0

我試圖添加從實體數據模型類創建的對象。我有一個名爲Users的表格,它已經變成了一個User EDM類。而且我還有一個Pages頁面,它已經成爲一個Page EDM類。這些表具有外鍵關係,因此每個頁面都與許多用戶關聯。現在我想能夠添加一個頁面,但我無法得到如何去做。我在下面的用戶處得到一個null參考異常。我仍然很困惑這一切,所以我敢肯定這是一個簡單的錯誤,但我不知道該怎麼做。實體框架中的外鍵關係

另外,順便說一下,編譯器要求我在對象初始值設定項中設置PageID,即使此字段在表中設置爲自動ID。我是否正確地將它設置爲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

嘗試:

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

關於這一點:

另外,順便說一句,編譯器需要我的對象設定PAGEID初始值設定程序

這不應該是真的。什麼是確切的錯誤信息?另外,什麼是ID的類型?

+0

謝謝,但不幸的是它不起作用...首先,您的表達式試圖將一個User對象分配給一個int(UserID)。所以我改爲page.Users.UserID = _context.UserSet.First(u => u.UserID == currentUser.UserID).UserID;但那也行不通。仍然在page.Users.UserID的用戶部分nullreference。我試圖添加一個新的頁面行,然後將該新頁面上的外鍵UserID設置爲當前User對象的UserID(主鍵)。我在這裏錯過了什麼嗎?很明顯,新頁面的Users集合是空的,但是我需要做些什麼來添加它呢? – Anders 2010-05-24 13:41:10

+0

對不起,複製/粘貼錯誤。固定。根據你上面的代碼,'Users'看起來像一個'User',而不是一個集合。 – 2010-05-24 14:13:16

+0

你說得對,它不是一個集合。但爲什麼它會被稱爲用戶然後...?但是,這工作!我進一步調查了一下,例如這裏建議不要這樣做:http://www.codewrecks.com/blog/index.php/2009/02/18/entity-framework-relations-and-entitykey/(顯然是由於開銷)。但是替代代碼真的太複雜了,所以我寧願隨你的建議去。任何承擔這一點? (我使用EF 3.5 btw,在這方面是4.0不同的?)。謝謝你的幫助! – Anders 2010-05-24 14:47:30