1

我有一個MVC4項目,使用實體框架5(代碼優先)與代碼優先遷移。該網站使用SimpleMembership。我試圖播種用戶表,但遇到與設置導航屬性有關的錯誤。播種與一對多關係的用戶數據庫

我有一個AccountUser模型。 SimpleMembership使用User模型作爲我自定義的users表。這種關係是一對多關係,每User有一個Account,但許多Users每個Account。我試圖在種子時將User設置爲Account關係,但我無法。


的模型(省略多餘的屬性):

public class User 
{ 
    [Key] 
    public int UserId { get; set; } 
    public string UserName { get; set; } 
    public string Email { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Description { get; set; } 

    public int AccountId { get; set; } 
    public virtual Account Account { get; set; } 
} 

public class Account 
{ 
    [Key] 
    public int AccountId { get; set; } 
    public string Name { get; set; } 

    // Account has many users but only one "admin" user. ID manually set. 
    // Nullable because of chicken/egg problem (user requires account, account requires user) 
    public int? AdminUser { get; set; } 
    public virtual ICollection<User> Users { get; set; } 
} 

種方法:在哪裏我似乎運行前奏麻煩

protected override void Seed(MyProject.Data.MyContext context) 
{ 
    WebSecurity.InitializeDatabaseConnection("MyContext", "Users", "UserId", "UserName", autoCreateTables: true); 

    Account adminAccount = new Account() 
    { 
     Name = "Dev", 
     Description = "Dev account" 
    }; 

    context.Accounts.AddOrUpdate(adminAccount); 

    if (!WebSecurity.UserExists("[email protected]")) 
    { 
     WebSecurity.CreateUserAndAccount("[email protected]", "password", new User() 
     { 
      Email = "[email protected]", 
      FirstName = "Dev", 
      LastName = "Guy" 
      // Problematic properties - see below 
      // Account = adminAccount, 
      // AccountId = adminAccount.AccountId 
     }); 
    } 
} 

是,當我打電話WebSecurity.CreateUserAndAccount

  1. 如果我嘗試包括導航屬性Account = adminAccount我得到的錯誤:

    "No mapping exists from object type MyProject.Models.Account to a known managed provider native type."

  2. 如果我試圖僅僅包括FK參考AccountId = adminAccount.AccountId我得到的錯誤:

    "Invalid column name 'Account'"

  3. 如果我不包括AccountAccountId,我也得到

    "Invalid column name 'Account'"


我應該指出,我的工作只是在我的類的導航屬性。當我添加外鍵屬性時,所有東西都爆炸了(有些錯誤與FK相關,但是我無法很好地將它們複製到這裏,它們很可能與我的數據庫需要重新創建有關。用新鮮的,表少數據庫-errors

另外,我使用的是SQL Azure的是我的SQL數據庫

這似乎是一個常見的用例SimpleMembership;我不知道是什麼它給我這麼大的麻煩。

回答

1

,因爲我以爲,這是一個非常愚蠢的錯誤,基本上Account尚未在數據庫中創建之前,我試圖把它的ID分配給新User

當我嘗試手動數據插入到數據庫中,我得到了以下錯誤:

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_dbo.Users_dbo.Accounts_AccountId". The conflict occurred in database "projectdev", table "dbo.Accounts", column 'AccountId'.

一些挖我發現我被分配到用戶的帳戶ID是不正確之後,當我改變了ID到正確的一個它工作得很好。這讓我意識到,在嘗試將其AccountId分配給Users表之前,我並未將帳戶上下文更改提交給數據庫。

我只是在context.Accounts.AddOrUpdate(adminAccount);之後加了context.SaveChanges();,一切正常。

好悲傷...