2011-06-08 31 views
3

在我嘗試在我的代碼優先的MVC3項目中擴展MVC成員資格提供程序後出現一個奇怪的錯誤。MVC會員問題 - C#,EntityFramework

的錯誤是:

EntityType 'MembershipUser' has no key defined. Define the key for this EntityType. 

EntitySet "MembershipUsers" is based on type "MembershipUser" that has no keys defined 

我已經建立了標準的asp.net成員資格,但增加了一個額外的表&模式叫的UserDetails,其中外鍵是在aspnet_Users用戶ID字段。

將條目插入users表後,我得到UserId並嘗試在Useretails表中輸入其他詳細信息,但這是出現這些錯誤的時間。這是其他相關的代碼。該的AccountController:

if (createStatus == MembershipCreateStatus.Success) 
      {      
       //Add other user details 
       UserRepository _user = new UserRepository(); 
       UserDetails userDetails = new UserDetails(); 

       userDetails.EmployeeNumber = Request.Form["EmployeeNumber"]; 
       userDetails.Title = Request.Form["Title"]; 
       userDetails.FirstName = Request.Form["FirstName"]; 
       userDetails.Initials = Request.Form["Initials"]; 
       userDetails.Surname = Request.Form["Surname"]; 
       userDetails.Nino = Request.Form["Nino"]; 

       _user.AddUserDetails(userDetails, model.Email); 
       return RedirectToAction("Welcome", "Home"); 
      } 

UserRepository:

public MembershipUser GetUserByEmail(string email) 
    { 
     MembershipUser user = Membership.GetUser(email); 
     return user; 
    } 


    public void AddUserDetails(UserDetails userDetails, string email) 
    { 
     MembershipUser user = GetUserByEmail(email); 
     Guid userGuid = (Guid)Membership.GetUser(email).ProviderUserKey; 
     userDetails.UserID = userGuid; //Add UserID foreign key 
     using (IntranetApplication db = new IntranetApplication()) 
     { 
      db.UserDetails.Add(userDetails); 
      db.SaveChanges(); 
     } 
    } 

在db.SaveChanges線誤差火災。

由於MemberShip用戶本身並不是實體框架的一部分,是否有人知道我可以如何將UserID設置爲主鍵?我檢查了數據庫,它已經設置好了,所以不知道我可以在代碼中修改它。

謝謝 - 任何幫助讚賞

回答

3

爲了擴大克雷格所說的話,我知道鏈接會員表格很方便,但沒有必要。編寫你的查詢來接受用戶ID字段作爲參數,然後從Membership.GetUser()。ProviderUserKey傳遞它。

另外,不要試圖在UserName上鍵入你的表,因爲如果一個用戶創建了一個具有特定名字的用戶,然後被刪除,那麼會產生一個安全問題,然後創建一個同名的新用戶。

+0

好吧,這似乎夠公平,所以我刪除了我的新表和成員表之間的關係,並刪除了代碼中的鏈接,但它仍在發生。這可能是我在這裏的mvc經驗不足,但是如果我只是通過輸入一行(包括使用來自成員表的用戶標識)來修改UserDetails表,那麼還有什麼更多的我只能保存到特定的模型,即UserDetails,而不是整個數據庫? – 2011-06-08 14:05:54

+0

Doh!我沒有刪除一個參考 - 我現在已經刪除它,它工作正常。感謝您和Craig的信息 - 非常有幫助.. – 2011-06-08 14:18:34

4

你有兩個問題。

  1. 您對MembershipUser的映射沒有定義關鍵字,無論是隱式還是顯式。你不顯示映射代碼,但這就是錯誤所說的。
  2. 反正你不應該試圖映射MembershipUser

(2)這裏最重要的一點,因爲它使(1)種不相關。 You should never depend on the SQL Provider DB tables。你也不應該使用MembershipUser作爲一個實體,因爲你不控制它,並且那些保持它的人不打算以這種方式使用它。

從Membership API獲取您的會員資料數據,而不是通過EF直接點擊數據庫。