Я пытаюсь смоделировать сущность со сложным объектом значения.
Структура базы данных может выглядеть примерно так:
+-------------------------------------+
| car |
+----------------------+--------------+
| id | CHAR(40) |
+----------------------+--------------+
| model | VARCHAR(255) |
+----------------------+--------------+
| specs_engine_version | VARCHAR(255) |
+----------------------+--------------+
| specs_lighting | VARCHAR(255) |
+----------------------+--------------+
+------------------------------------+
| specs_interior_equipment |
+-----------------------+------------+
| car_id | CHAR(40) |
+-----------------------+------------+
| interior_equipment_id | INT(11) |
+-----------------------+------------+
Это сущность Car
:
public class Car : IEntity<Guid>
{
public Guid Id { get; private set; }
public string Model { get; private set; }
public Specs Specs { get; set; }
public Car()
{ }
}
Это объект значения Specs
:
public class Specs : ValueObject<Specs>
{
public string EngineVersion { get; private set; }
public string Lighting { get; private set; }
public List<int> InteriorEquipment { get; private set; }
public Specs()
{}
}
Я настраиваю сопоставления более или менее так:
class CarMap : IEntityTypeConfiguration<Car>
{
public void Configure(EntityTypeBuilder<Car> builder)
{
builder.HasKey(t => t.Id);
builder.ToTable("car");
builder.Property(e => e.Id).HasColumnName("id");
builder.Property(e => e.Name).HasColumnName("name");
builder.OwnsOne(j => j.Specs, l =>
{
l.Property(t => t.EngineVersion).HasColumnName("specs_engine_version");
l.Property(t => t.Lighting).HasColumnName("specs_lighting");
});
}
}
Вопрос это: как мне настроить сопоставления, чтобы сохранить внутреннее оборудование в отдельной таблице?
Я знаю, что могу определить внутреннее оборудование как объект, использующий что-то вроде этого:
builder
.HasMany(j => j.InteriorEquipment)
.WithOne()
.HasForeignKey(t => t.CarId)
.OnDelete(DeleteBehavior.Cascade)
.Metadata.PrincipalToDependent.SetPropertyAccessMode(PropertyAccessMode.Field);
но я не знаю, как объединить все части ...
Не могли бы вы мне помочь?