У меня есть класс
public class Document
{
public string TranId { get; set; }
public Record Record { get; set; }
public List<Error> Errors { get; set; }
}
public class Record
{
public string TranId { get; set; }
public List<DataResult> DataResults { get; set; }
}
public class DataResult
{
public string DataSourceName { get; set; }
public List<DataField> DataFields { get; set; }
public List<CustomField> CustomFields { get; set; }
}
Я хочу отобразить классы Record и DataResult как объекты Value, поэтому я попытался отобразить как
public void Configure(EntityTypeBuilder<Document> builder)
{
builder.ToTable("Document");
builder.HasKey(x => x.TranId);
builder.OwnsOne(a => a.Record, a =>
{
a.ToTable("Doc_Record");
a.Property(p => p.TranId).HasMaxLength(100)
.HasColumnName("TranID")
.HasDefaultValue("");
a.OwnsMany(x => x.DataResults, x =>
{
x.ToTable("Doc_Rec_DataResults");
x.Property(p => p.DataSourceName).HasMaxLength(150)
.HasColumnName("DataSourceName")
.HasDefaultValue("");
});
}
}
Когда я пытаюсь добавить эту миграцию,ошибки с сообщением:
Тип сущности 'DataResult' требует определения первичного ключа.
- И почему он требует первичного ключа, потому что япытается отобразить как объект значения?
Кто-то предложил использовать эту ссылку , и я пытаюсь добавить
a.OwnsMany(x => x.DataResults, x =>
{
x.WithOwner().HasForeignKey("RecordId");
x.ToTable("Doc_Rec_DataResults");
x.Property(p => p.DataSourceName).HasMaxLength(150)
.HasColumnName("DataSourceName")
.HasDefaultValue("");
});
, но этот подход не работает, причина WithOwner
доступно из .net core 3
, где я использую .net core 2
(и мне действительно нужно добавить свойство RecordId
в класс Record
(это объект значения).
Itбыло бы здорово, если бы кто-нибудь смог привести пример того, как сопоставить коллекцию объектов-значений с OwnsMany
в EF Core 2
.