我正在使用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与新创建的用户一起使用。我最终得到了两个代理商......
答案 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