Тип продукта со свойствами

#c# #entity-relationship #entity-framework-6

#c# #сущность-отношение #сущность-фреймворк-6 #entity-framework-6

Вопрос:

Надеюсь, кто-нибудь сможет мне помочь. Я пытаюсь использовать базовый каталог продукта с предопределенным типом. Так, например, существует простой тип и расширенный тип продуктов, эти типы имеют настраиваемые свойства. Итак, у меня есть мои модели, подобные приведенным ниже, но я не могу получить значение, хранящееся в другой таблице с отношением к свойству en product.

Ниже я добавил желаемый вывод json для объекта singel ProductDto.. Здесь PropertyTypeValue должно быть значением свойства, указанного в продукте.

Надеюсь, я правильно это объяснил.

 [Table("Product")]
public class ProductDto
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Key]
    public Guid Id { get; set; }
    public string Name { get; set; }                        
    public virtual ProductTypeDto ProductType { get; set; }       

}

[Table("ProductType")]
public class ProductTypeDto
{

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Key]
    public Guid Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<PropertyTypeGroupDto> PropertyTypeGroups { get; set; }

}

[Table("PropertyTypeGroup")]
public class PropertyTypeGroupDto
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Key]
    public Guid Id { get; set; }
    public string Name { get; set; }
    public virtual ProductTypeDto ProductType { get; set; }
    public virtual ICollection<PropertyTypeDto> PropertyTypes { get; set; }
}

[Table("PropertyType")]
public class PropertyTypeDto
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Key]
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public virtual PropertyTypeGroupDto PropertyTypeGroup { get; set; }
}

[Table("PropertyValue")]
public class PropertyValueDto
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Key]
    public Guid Id { get; set; }
    public string Value { get; set; }
    public virtual ProductDto Product { get; set; }
    public virtual PropertyTypeDto PropertyType { get; set; }
}
  
 { 
 Тип продукта: {
 Группы типов свойств: [ 
 {
 Типы свойств: [
 {
 propertyTypeValue: значение null, 
 идентификатор: "88c1e9ed-7b03-e411-8ca5-74d4351a6e12", 
 имя: "Пример свойства 1"
 }, 
{ 
 propertyTypeValue: значение null, 
 идентификатор: "89c1e9ed-7b03-e411-8ca5-74d4351a6e12", 
 имя: "Пример свойства 2"
 } 
], 
 идентификатор: "87c1e9ed-7b03-e411-8ca5-74d4351a6e12", 
 название: "Группа образцов"
 } 
], 
 идентификатор: "85c1e9ed-7b03-e411-8ca5-74d4351a6e12", 
 название: "Простой продукт", 
 псевдоним: "simpleproduct"
 }, 
 идентификатор: "86c1e9ed-7b03-e411-8ca5-74d4351a6e12", 
 название: "Образец продукта 1"
 }

Ответ №1:

Вы можете явно включать свойства навигации в свои запросы linq следующим образом:

 var productValue = this.Context.PropertyValues.Include(p => p.Product).FirstOrDefault(pv => pv.Id == someId);