我有 2 个抽象类:配置和房间。两者都有 2 个用于 Coworking 和 Meeting 的具体实现(CoworkingRoomConfiguration、MeetingRoomConfiguration、MeetingRoom 和 CoworkingRoom)。
两者都配置为具有使用 Fluent API 的鉴别器列:
房间:
builder.ToTable(nameof(Room));
builder.HasKey(x => x.Id);
builder.HasDiscriminator<string>("Type")
.HasValue<MeetingRoom>("Meeting")
.HasValue<CoworkingRoom>("Coworking");
配置:
builder.ToTable(nameof(Configuration));
builder.HasKey(x => x.Id);
builder.HasDiscriminator<string>("Room_type")
.HasValue<MeetingRoomConfiguration>("Meeting")
.HasValue<CoworkingRoomConfiguration>("Cowork");
在我的域中,一个 CoworkingRoom 有一个 CoworkingRoomConfiguration。不过,MeetingRoom 有许多 MeetingRoomConfigurations。是否可以使用 Fluent API 显式声明这些关系,同时将类型配置为 TPH?
现在我依靠 EF Core 来推断基于属性类型的关系,但这不是我想要依赖的东西。
类如下,Entity类型基于本文
房间等级:
public abstract class Room : Entity
{
// Omitted for brevity
}
public class MeetingRoom : Room
{
public ICollection<MeetingRoomConfiguration> Configurations { get; }
// Rest omitted for brevity
}
public class CoworkingRoom : Room
{
public CoworkingRoomConfiguration Configuration { get; set; }
// Rest omitted for brevity
}
配置类:
public abstract class Configuration : Entity
{
// Omitted for brevity
}
public class CoworkingRoomConfiguration : Configuration
{
// Omitted for brevity
}
public class MeetingRoomConfiguration : Configuration
{
// I'd like to get rid of the circular reference here too if possible
public IEnumerable<MeetingRoom> MeetingRooms { get; set; }
// Rest omitted for brevity
}