使用ASP.Net Identity 2创建新用户时,新行将插入父表中

时间:2014-04-16 02:01:44

标签: c# entity-framework entity-framework-6 asp.net-identity-2

我正在使用ASP.Net Identity 2.我创建了一个用户如下:

public class User : IdentityUser<int, CustomUserLogin, CustomUserRole, CustomUserClaim>
{
    public virtual Agency Agency { get; set; }

    public string FirstName { get; set; }

    public string LastName { get; set; }
}

用户是代理商的成员:

public class Agency
{

    public int Id { get; set; }

    public string Name { get; set; }

    public string TaxId { get; set; }

    public List<User> Brokers { get; set; } 
}

用户与代理商有一对多的关系。在创建用户时,我会从数据库中检索代理商,然后将Agency设置为User。这是事情出错的地方。

            var manager = Identity.GetUserManager();
            manager.Create(new User()
            {
                UserName = "chuckconway",
                Email = "chuck@winnemen.com",
                FirstName = "Chuck",
                LastName = "Conway",
                Agency = agency

            }, "123");

ASP.NET Identity不是引用代理并将主键插入User表,而是将新的代理记录插入代理表,并将其ID与新创建的用户一起使用。我最终得到了两个代理商......

1 个答案:

答案 0 :(得分:3)

通常,对于EF中的一对多关系,您希望拥有导航属性中包含的引用表的ID(外键),如下所示:

public class User : IdentityUser<int, CustomUserLogin, CustomUserRole, CustomUserClaim>
{
  public int AgencyId { get; set; } //new
  public virtual Agency Agency { get; set; }
  public string FirstName { get; set; }
  public string LastName { get; set; }
}

然后在插入/用户创建过程中使用AgencyId,如从数据库中检索AgencyID并将其分配给User