【发布时间】:2020-09-04 10:23:14
【问题描述】:
我有这些实体:用户、地址和公司。用户是主要实体,每个用户都有一个邮寄地址和一个公司(一对一关系)
public class User : IdentityUser
{
// code
// Company relationship
public Company Company { get; set; }
// Mailing Address relationship
public Address MailingAddress { get; set; }
}
public class Company
{
[Key]
public int Id { get; set; }
//code here
[ForeignKey("User")]
public int UserId { get; set; }
public User User { get; set; }
}
public class Address
{
[Key]
public int Id { get; set; }
//code here
[ForeignKey("User")]
public int UserId { get; set; }
public User User { get; set; }
}
这里是 DbContext
public class AuthentificationContext : IdentityDbContext<User>
{
public AuthentificationContext(DbContextOptions options) : base(options){}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<User>()
.Ignore(user => user.ConcurrencyStamp)
.Ignore(user => user.LockoutEnabled)
.Ignore(user => user.LockoutEnd);
modelBuilder.Entity<User>()
.HasOne<Address>(u => u.MailingAddress)
.WithOne(a => a.User)
.HasForeignKey<Address>(a => a.UserId);
modelBuilder.Entity<User>()
.HasOne<Company>(u => u.Company)
.WithOne(c => c.User)
.HasForeignKey<Company>(c => c.UserId);
modelBuilder.Entity<User>().ToTable("User");
}
public DbSet<User> Users { get; set; }
public DbSet<Address> MailingAddresses { get; set; }
public DbSet<Company> Companies { get; set; }
}
问题在于 IdentityUser 中的 Id 是字符串类型,不能被覆盖为 int 类型。我该怎么办?去掉IdentityUser的继承还是尝试把外键改成string类型?
另外,我的方法正确吗?
谢谢!
【问题讨论】:
-
从 IdentityUser 中移除继承 -- 是的!让您自己的用户将 IdentityUser 称为您的 BL 和 ASP.Net 身份之间的唯一连接。
标签: entity-framework-core asp.net-identity dbcontext