2009-05-31 14 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の場合)の作品:

は、だから私は、コントローラの1のために、次のコードを持っています。ただし、新しいユーザーを追加するのはコードの部分です。これは、ユーザーオブジェクトにUserCompanyProfileを追加するコードの部分に到達するまで機能します。このコードをコメントアウトすると、うまく動作します。この問題は、データベースを照会してUserCompanyProfileに会社を添付しようとすると発生します。このエラーが発生します。ところで

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

、それは実際には1つの会社のオブジェクトを(それがタイプ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); 
       // ... 

うまくいけば、これは他の誰かに役立ちます!

関連する問題