【问题标题】:When creating new User with ASP.Net Identity 2 new row is inserted into parent table使用 ASP.Net Identity 2 创建新用户时,将新行插入父表
【发布时间】:2014-04-16 02:01:44
【问题描述】:

我正在使用 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 不是引用 Agency 并将主键插入到 User 表中,而是将新的机构记录插入到机构表中,并将其 id 用于新创建的用户。我最终有两个机构...

【问题讨论】:

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


    【解决方案1】:

    通常对于 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

    【讨论】:

    • 谢谢,我试试看。
    猜你喜欢
    • 1970-01-01
    • 2021-05-16
    • 2014-08-29
    • 2014-05-15
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    • 2018-10-12
    • 2018-02-19
    相关资源
    最近更新 更多