Я внедряю наследование таблицы в иерархию (TPH) в моем проекте с использованием основного ядра Entity Framework (EF Core). Моя цель - запросить все поля объекта компонента и получить унаследованные модели (Textfield, Numberfield и т. Д.) С их конкретными свойствами. < /P>
Вот упрощенная версия моих моделей: < /p>
public class Component : BaseEntity
{
public Guid Id { get; set; }
public required string Name { get; set; }
public ICollection Fields { get; set; } = [];
}
public abstract class Field
{
public Guid Id { get; set; }
public required string Name { get; set; }
public FieldType Type { get; set; }
public Guid ComponentId { get; set; }
public Component? Component { get; set; }
}
public class TextField : Field
{
public int? MaxLength { get; set; }
public bool IsMultiline { get; set; }
}
public class NumberField : Field
{
public decimal? MinValue { get; set; }
public decimal? MaxValue { get; set; }
}
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity(builder =>
{
builder
.HasDiscriminator(f => f.Type)
.HasValue(FieldType.Text)
.HasValue(FieldType.Number)
.HasValue(FieldType.OpenList);
});
builder.Entity(builder =>
{
builder.Property(t => t.MaxLength).HasColumnName("MaxLength");
builder.Property(t => t.IsMultiline).HasColumnName("IsMultiline");
});
builder.Entity(builder =>
{
builder.Property(n => n.MinValue).HasColumnName("MinValue");
builder.Property(n => n.MaxValue).HasColumnName("MaxValue");
});
}
< /code>
Проблема:
Мне нужно запросить все поля объекта компонента и получить унаследованные модели (Textfield, Numberfield и т. Д.) С их конкретными свойствами. Тем не менее, я изо всех сил пытаюсь достичь этого. Но это не поддерживает этот вариант использования. < /p>
Свойства отображения на модели компонента: я попытался добавить свойства отображения для конкретных типов на модели компонента, но EF Core попытался создать тени иностранных ключей , что вызвало проблемы.
Ручное отображение с конкретными DTO: я попробовал вручную отображать с конкретными DTO, но я не мог использовать переключатель или структуры if-else в деревьях экспрессии.
Вопрос:
Как я могу запросить все поля объекта компонента и получить унаследованные модели с их конкретными свойствами в EF Core? Есть ли лучшие практики или альтернативные подходы для обработки этого сценария?
Подробнее здесь: https://stackoverflow.com/questions/793 ... ework-core
Как запросить все поля модели наследования TPH в Entity Framework Core ⇐ C#
Место общения программистов C#
1737971830
Anonymous
Я внедряю наследование таблицы в иерархию (TPH) в моем проекте с использованием основного ядра Entity Framework (EF Core). Моя цель - запросить все поля объекта компонента и получить унаследованные модели (Textfield, Numberfield и т. Д.) С их конкретными свойствами. < /P>
Вот упрощенная версия моих моделей: < /p>
public class Component : BaseEntity
{
public Guid Id { get; set; }
public required string Name { get; set; }
public ICollection Fields { get; set; } = [];
}
public abstract class Field
{
public Guid Id { get; set; }
public required string Name { get; set; }
public FieldType Type { get; set; }
public Guid ComponentId { get; set; }
public Component? Component { get; set; }
}
public class TextField : Field
{
public int? MaxLength { get; set; }
public bool IsMultiline { get; set; }
}
public class NumberField : Field
{
public decimal? MinValue { get; set; }
public decimal? MaxValue { get; set; }
}
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity(builder =>
{
builder
.HasDiscriminator(f => f.Type)
.HasValue(FieldType.Text)
.HasValue(FieldType.Number)
.HasValue(FieldType.OpenList);
});
builder.Entity(builder =>
{
builder.Property(t => t.MaxLength).HasColumnName("MaxLength");
builder.Property(t => t.IsMultiline).HasColumnName("IsMultiline");
});
builder.Entity(builder =>
{
builder.Property(n => n.MinValue).HasColumnName("MinValue");
builder.Property(n => n.MaxValue).HasColumnName("MaxValue");
});
}
< /code>
Проблема:
Мне нужно запросить все поля объекта компонента и получить унаследованные модели (Textfield, Numberfield и т. Д.) С их конкретными свойствами. Тем не менее, я изо всех сил пытаюсь достичь этого. Но это не поддерживает этот вариант использования. < /p>
Свойства отображения на модели компонента: я попытался добавить свойства отображения для конкретных типов на модели компонента, но EF Core попытался создать тени иностранных ключей , что вызвало проблемы.
Ручное отображение с конкретными DTO: я попробовал вручную отображать с конкретными DTO, но я не мог использовать переключатель или структуры if-else в деревьях экспрессии.
Вопрос:
Как я могу запросить все поля объекта компонента и получить унаследованные модели с их конкретными свойствами в EF Core? Есть ли лучшие практики или альтернативные подходы для обработки этого сценария?
Подробнее здесь: [url]https://stackoverflow.com/questions/79390328/how-to-query-all-fields-of-a-tph-inheritance-model-in-entity-framework-core[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия