Asp.net mvc 4 使用一对多关系设置用户数据库种子

Asp.net mvc 4 使用一对多关系设置用户数据库种子,asp.net-mvc-4,entity-framework-5,azure-sql-database,entity-framework-migrations,seeding,Asp.net Mvc 4,Entity Framework 5,Azure Sql Database,Entity Framework Migrations,Seeding,我有一个MVC4项目,它使用EntityFramework5(代码优先)和代码优先迁移。该网站使用SimpleMembership。我正在尝试为users表设置种子,但遇到与导航属性设置相关的错误 我有一个帐户和用户模型SimpleMembership使用User模型作为我的自定义users表。这种关系是一对多的,每个用户有一个帐户,但每个帐户有许多用户。我正在尝试在种子时间将用户设置为帐户关系,但无法 模型(忽略无关属性): 当我调用WebSecurity.CreateUserAndAcco

我有一个MVC4项目,它使用EntityFramework5(代码优先)和代码优先迁移。该网站使用
SimpleMembership
。我正在尝试为users表设置种子,但遇到与导航属性设置相关的错误

我有一个
帐户
用户
模型
SimpleMembership
使用
User
模型作为我的自定义
users
表。这种关系是一对多的,每个
用户有一个
帐户
,但每个
帐户
有许多
用户。我正在尝试在种子时间将
用户
设置为
帐户
关系,但无法


模型(忽略无关属性):

当我调用
WebSecurity.CreateUserAndAccount时,我似乎正在运行intro,问题是:

  • 如果我试图包含导航属性
    Account=admincount
    ,则会出现错误:

    “不存在从对象类型MyProject.Models.Account到已知托管提供程序本机类型的映射。”

  • 如果我试图只包括FK引用
    AccountId=adminAccount.AccountId
    ,我会得到错误:

    “无效的列名‘帐户’”

  • 如果我没有包括
    帐户
    帐户ID
    ,我也会得到

    “无效的列名‘帐户’”


  • 我应该指出,我在类中只使用了导航属性。当我添加外键属性时,一切都崩溃了(有一些与FKs相关的错误,但我无法很好地复制它们,将它们发布到这里,它们可能与我需要重新创建的数据库有关。我在一个新的、无表的数据库中看到了上述错误

    此外,我正在使用SQLAzure作为我的SQL数据库


    这似乎是
    SimpleMembership
    的一个常见用例;我不知道它给我带来了多少麻烦。

    正如我所想,这是一个非常愚蠢的错误。基本上
    帐户在我尝试将其ID分配给新的
    用户之前,还没有在数据库中创建

    当我尝试手动将数据插入数据库时,出现以下错误:

    INSERT语句与外键约束“FK_dbo.Users_dbo.Accounts_AccountId”冲突。冲突发生在数据库“projectdev”表“dbo.Accounts”列“AccountId”中。

    经过一番挖掘,我发现分配给用户的AccountID不正确,当我将ID更改为正确的ID时,它工作正常。这使我意识到,在尝试将其AccountID分配给Users表之前,我没有将帐户上下文更改提交给数据库

    我只是在
    context.Accounts.AddOrUpdate(admincount);
    之后添加了
    context.SaveChanges();
    ,一切正常


    好悲伤…

    正如我所想,这是一个非常愚蠢的错误。基本上,在我试图将帐户ID分配给新的
    用户之前,
    帐户还没有在数据库中创建

    当我尝试手动将数据插入数据库时,出现以下错误:

    INSERT语句与外键约束“FK_dbo.Users_dbo.Accounts_AccountId”冲突。冲突发生在数据库“projectdev”表“dbo.Accounts”列“AccountId”中。

    经过一番挖掘,我发现分配给用户的AccountID不正确,当我将ID更改为正确的ID时,它工作正常。这使我意识到,在尝试将其AccountID分配给Users表之前,我没有将帐户上下文更改提交给数据库

    我只是在
    context.Accounts.AddOrUpdate(admincount);
    之后添加了
    context.SaveChanges();
    ,一切正常

    好悲伤

    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("dev@dev.com"))
        {
            WebSecurity.CreateUserAndAccount("dev@dev.com", "password", new User()
            {
                Email = "dev@dev.com",
                FirstName = "Dev",
                LastName = "Guy"
                // Problematic properties - see below
                // Account = adminAccount,
                // AccountId = adminAccount.AccountId
            });
        }
    }