2013-05-27 47 views
1

MVC4使用db首先與簡單成員如何查詢簡單成員數據庫

我有我的會員資格工作到我可以保存一個新用戶的點。一旦這個人被註冊了,我需要渲染一個新的視圖,以便他們可以填寫更多的信息,所以我需要將UserProfile表中新創建的用戶標識傳遞給新視圖。我曾嘗試修改模板寄存器的方法是:

  try 
      { 
       WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new { Email = model.Email }, true); 
       WebSecurity.Login(model.UserName, model.Password); 

//Get the userid for this new user 
       var db = new UsersContext(); 
       int id = db.UserProfiles.Where(x => x.UserName == model.UserName).Select(x => x.UserId).FirstOrDefault(); 

       return RedirectToAction("Edit", "Profile", id); 
      } 

這給了我這個錯誤:

\ tSystem.Data.Entity.Edm.EdmEntityType:的EntityType「用戶配置」沒有定義鍵。定義此EntityType的關鍵字。 \ tSystem.Data.Entity.Edm.EdmEntitySet:EntityType:EntitySet'UserProfiles'基於沒有定義鍵的類型'UserProfile'。

我相信這個錯誤與嘗試在不是edmx模型的表上使用EF有關。我沒有將任何簡單成員表(UserProfile,Membership,Roles等)添加到我的edmx文件中,因爲當我這樣做時,我得到重複類錯誤,我猜測是因爲SM表首先創建了代碼。

我從來沒有做過任何代碼,答案是否存在?或者我需要將SM表添加到我的edmx模型,以便查詢它們。如果是這樣,我該如何解決重複類錯誤?

我在我的web配置中有2個獨立的連接字符串。

編輯++++++++++

我一直在研究,發現了不同的方式,但我得到了同樣的錯誤。

   int id; 
       using (var db = new UsersContext()) 
       { 
        var user = db.UserProfiles.Find(model.UserName); 
        id = user.UserId; 
       } 

我在'使用'行中得到錯誤。下面是UsersContext代碼:什麼是你定義

<add name="SecurityEntities" connectionString="data source=(localdb)\v11.0;initial catalog=OurAgreements;user id=oaadmin;password=136VDSyPLrcfgPfw3BIH;multipleactiveresultsets=True;application name=EntityFramework" providerName="System.Data.SqlClient" /> 

你能看到我錯了

回答

1

public class UsersContext : DbContext 
{ 
    public UsersContext() 
     : base("SecurityEntities") 
    { 
    } 

    public DbSet<UserProfile> UserProfiles { get; set; } 
} 

「SecurityEntities是,它看起來像連接字符串? UserProfile看起來應該是這樣的:

[Table("UserProfile")] 
public class UserProfile 
{ 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int UserId { get; set; } 
    public string UserName { get; set; } 
    ... 
} 

密鑰屬性表示用戶ID 鍵和DatabaseGeneratedAttribute表明用戶ID值由數據庫生成的。您收到的錯誤似乎表示您的UserProfile定義中沒有密鑰屬性。

如果您有不斷變化的用戶配置架構麻煩更新13年5月29日

,它不是設置遷移來看看這篇文章,顯示how to customize and seed SimpleMembership。本文中的設置更適合開發和測試您的應用程序。在setting up database migration for SimpleMembership上有另一篇文章。

+0

謝謝凱文的響應。我添加了鍵和標識屬性,這使得執行查詢成爲可能,但它返回爲空。然後我添加了「表格」屬性,它錯誤地指出數據庫已經改變,我應該使用遷移。我不能擺脫UserProfile模型,並將表添加到我的edmx文件並用作正常的ef連接?我從來沒有先做過代碼。 – BattlFrog

+0

請看看我更新的答案。 –

0

我試圖

WebSecurity.CreateUserAndAccount(model.UserName, model.Password, null, false); 
var ID = WebSecurity.GetUserId(model.UserName); 

,它很適合我