Вы можете попробовать установить свою модель 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
классе, затем переопределил FK в методеOnModelCreating
.
После удаления элемента в таблице Company
все элементы с одинаковым Id
в таблице Devices
(по сравнению с CompanyID
) будут автоматически удалены .
Поскольку мы используем 2 свойства [Table]
и [Key]
, чтобы определить имя таблицы и первичный ключ.Таким образом, в OnModelCreating
можно игнорировать, чтобы определить имя, PK, FK таблицы Device
.
Компания имеет много пользователей
ВВ этом случае:
Пользователь Класс:
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);
};
}