2009-05-31 3 views
2

그래서이 코드를 영원히 쏟아내어 이것을 알아 내려고했습니다 ... .NET 3.5 SP1에서 Entity Framework 1.0을 EFPocoAdapter와 함께 사용하고 있습니다. Poco 클래스).엔티티 프레임 워크 외래 키 (또는 그 부족)

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult EditUser(int? id, FormCollection form) 
    { 
     var user = new User(); 

     using (var db = new UMSEntities { DeferredLoadingEnabled = false }) 
     { 
      if (id != null) 
      { 
       user = db.Users.FirstOrDefault(p => p.UserID.Equals((int) id)); 
       db.LoadProperty(user, p => p.UserProfiles); 
       db.LoadProperty(user, p => p.UserCompanyProfile); 
      } 
      else 
      { 
       user.UserGuid = Guid.NewGuid(); 
       user.DateCreated = DateTime.Now; 
       user.DateLastActivity = DateTime.Now; 
       user.DateModified = DateTime.Now; 
       user.Password = "demo"; 
       user.Version = 0; 
       user.SecretAnswer = ""; 
       user.SecretQuestion = ""; 
       user.IsApproved = true; 
       user.IsActive = true; 

       user.UserProfiles = new UserProfile(); 
       user.UserCompanyProfile = new UserCompanyProfile 
         { 
          EmployeeID = "", 
          HireDate = DateTime.Now, 
          Title = "", 
          UserCode = "", 
          Company = db.Companies.First(p => p.CompanyID == 8) 
         }; 

       db.Users.InsertOnSaveChanges(user); 

      } 

      TryUpdateModel(user); 

      db.SaveChanges(); 
     } 

존재하는 사용자를 편집 완벽한 (! 통지 ID = null의 경우) 작품 :

은 그래서 컨트롤러 중 하나에 대한 다음과 같은 코드가 있습니다. 그러나 이는 새로운 사용자를 추가하는 코드 부분입니다. UserCompanyProfile을 사용자 객체에 추가하는 부분에 도달 할 때까지 작동합니다. 이 코드를 주석으로 작성하면 올바르게 작동합니다. 문제는 데이터베이스 쿼리를 통해 UserCompanyProfile에 회사를 연결하려고 할 때 발생합니다.이 오류가 발생합니다. 그런데

Entities in 'UMSEntities.UserCompanyProfiles' participate in the 'FK__UserCompa__Compa__25869641' relationship. 0 related 'Companies' were found. 1 'Companies' is expected. 

, 그것은 사실상 하나 개의 회사 객체를 (이 타입 PocoProxies.CompanyProxy이다) 반환 않습니다. 어떤 도움이라도 분명히 인정 될 것입니다!

+0

"p"는 어디에 선언합니까? – Julen

답변

0

ID가 8 인 회사는 있습니까? 올바른 회사를 먼저 얻으려면 코드를 변경하고 문제는 사라질 것입니다.

Lamda 표현식에 문제가있을 수 있지만 잘 모르겠습니다.

+0

나는 (결국) 회사 오브젝트를 리턴한다는 사실을 내 포스트에서 언급 했으므로 회사는 실제로 존재합니다. 나는 람다가 정확하다는 것을 확신하지만, 누군가가 통찰력이 있다면 좋을 것. –

2

나는 그것을 알아 냈다. 오, 나의 말은 나에게 오랜 시간이 걸렸다. .. 너무나 명백했다. 대신 회사를 쿼리하고 UserCompanyProfile를 통해 연결하는, 나는 주위를 다른 방법으로 연결하는 데 필요한 :

   // ... 
       user.UserProfiles = new UserProfile(); 
       user.UserCompanyProfile = new UserCompanyProfile 
         { 
          EmployeeID = "", 
          HireDate = DateTime.Now, 
          Title = "", 
          UserCode = "" 
         }; 

       var company = db.Companies.First(p => p.CompanyID.Equals(16)); 
       company.UserCompanyProfile.Add(user.UserCompanyProfile); 

       db.Users.InsertOnSaveChanges(user); 
       // ... 

을 희망이 다른 사람이 도움이!

관련 문제