2010-05-24 7 views
0

Entity Data Model 클래스에서 만든 개체를 추가하려고합니다. 사용자 EDM 클래스가 된 Users라는 테이블이 있습니다. 그리고 Page EDM 클래스가 된 테이블 Pages도 있습니다. 이 테이블에는 외래 키 관계가있어 각 페이지가 많은 사용자와 연관됩니다. 이제는 페이지를 추가 할 수 있기를 원하지만 어떻게 할 수는 없습니다. 아래의 사용자에 대해 nullreference 예외가 발생합니다. 나는 아직도이 모든 것에 대해 다소 혼란 스럽다. 그래서 나는 그것이 단순한 오류라고 확신한다. 그러나 나는 그것을 어떻게하는지 알 수 없다.Entity Framework의 외래 키 관계

또한이 필드는 테이블의 자동 ID로 설정되어 있지만 컴파일러에서는 개체 이니셜 라이저에서 PageID를 설정해야합니다. 내가 그것을 올바르게 0으로 설정하고, 저장 될 때 테이블에서 자동으로 업데이트 될 것을 기대하거나 어떻게해야합니까?

도움을 주셨습니다.

질문의 방법 : 이에 대해

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

:

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

시도 또한

, 그런데, 컴파일러는 내가 객체에 페이지 id를 설정해야합니다 이니셜 라이저

사실이 아니어야합니다. 정확한 오류 메시지 란 무엇입니까? 또한 ID 유형은 무엇입니까?

+0

감사합니다.하지만 불행히도 작동하지 않습니다. 첫째, 사용자 개체를 int (UserID)에 할당하려고합니다. 그래서 page.Users.UserID = _context.UserSet.First (u => u.UserID == currentUser.UserID)로 변경했습니다 .UserID; 그러나 그것도 작동하지 않습니다. 여전히 페이지의 사용자 부분에 null 참조가 있습니다. 사용자 .UserID. 나는 새 페이지 행을 추가하려고 시도하고 그 새 페이지에 외래 키 UserID를 현재 User 객체 UserID (기본 키)로 설정하려고합니다. 내가 여기서 뭔가를 놓치고 있니? 분명히 새 페이지의 Users 컬렉션은 비어 있지만 추가하려면 어떻게해야합니까? – 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

관련 문제