我有以下情况:我有一个Company公司,它尽可能简单
public class Company
{
public int ID { get; set; }
public string Name { get; set; }
}
我还需要从ASP扩展IdentityUser类。 NET身份核心:
public class User : IdentityUser
{
public Company Company { get; set; }
public int CompanyID { get; set; }
}
到目前为止还不错。但是我还需要一个Device类:
public class Device
{
public Company Company { get; set; }
public int CompanyID { get; set; }
}
因此,我们将List<Device>
类型的Devices属性添加到Company类中,并将List<User>
类型的Users属性添加到Company类中。
问题是我想从不同数据库中的ASP .NET Identity Core数据中分离数据(设备表)。我想将表公司与Auth数据一起放入数据库。和表Device在另一个。如何告诉实体框架Device类的Company属性来自另一个数据库?
答案 0 :(得分:1)
如果Company属性来自另一个数据库,则可能需要为其添加第二个数据库上下文。像这样:
public class CompanyModelContext : DbContext
{
public CompanyModelContext(DbContextOptions options) : base(options){ }
public DbSet<Company> Company { get; set; }
}
答案 1 :(得分:0)
您可以尝试像这样设置EF模型:
公司表:
[Table("Companies")]
public class Company
{
[Key]
public int ID { get; set; }
public string Name { get; set; }
public ICollection<Device> Devices { get; set; }
}
设备表:
[Table("Devices")]
public class Device
{
[Key]
public int Id { get; set; }
public Company Company { get; set; }
public int CompanyID { get; set; }
}
ApplicationDbContext 类:
public DbSet<Company> Companies { get; set; }
public DbSet<Device> Devices { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<Company>(buildAction =>
{
buildAction.ToTable("Companies");
buildAction.HasMany(x => x.Devices)
.WithOne(x => x.Company)
.OnDelete(DeleteBehavior.Cascade);
};
}
我在Devices
类中添加了Company
作为列表,然后在方法OnModelCreating
中覆盖了FK。
一旦删除表Company
中的一项,表Id
中所有与Devices
相同的项(与CompanyID
相比)将被自动删除 < / em>。
由于我们使用2个属性[Table]
和[Key]
来定义表名和主键。因此,在OnModelCreating
中,您可以忽略以定义表Device
的名称,PK,FK。
公司有很多用户
在这种情况下:
User 类:
public class User : IdentityUser
{
public int CompanyId { get; set; }
public Company Company { get; set; }
}
公司类:
[Table("Companies")]
public class Company
{
[Key]
public int ID { get; set; }
public string Name { get; set; }
public ICollection<Device> Devices { get; set; }
public ICollection<User> Users { get; set; }
}
ApplicationDbContext 类:
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<Company>(buildAction =>
{
buildAction.ToTable("Companies");
buildAction.HasMany(x => x.Devices)
.WithOne(x => x.Company)
.OnDelete(DeleteBehavior.Cascade);
buildAction.HasMany(x => x.Users)
.WithOne(x => x.Company)
.OnDelete(DeleteBehavior.Cascade);
};
}