Это должно быть довольно легко, но я немного борюсь.
Моя ситуация такова: у меня есть таблица (Commodity) с внешним ключом для другой таблицы (CommodityMaterial).В моей конечной точке GET я хочу получить все данные столбцов из Commodity, а также все столбцы из CommodityMaterial.
Я настроил его следующим образом:
public class Commodity
{
public long CommodityID { get; set; }
public long CommodityMaterialID { get; set; }
public decimal? SpecficWeight { get; set; }
public OmsCommodityMaterial OmsCommodityMaterial { get; set; }
public ICollection<OmsCommodityMaterial> OmsCommodityMaterials { get; set; }
}
Таблица внешнего ключа:
public class CommodityMaterial
{
public long? CommodityMaterialID { get; set; }
public string Name { get; set; }
public long? SortOrder { get; set; }
public Commodity Commodity { get; set; }
}
API FLUENT:
modelBuilder.Entity<Commodity>(entity =>
{
entity.Property(e => e.CommodityID)
.HasColumnName("CommodityID")
.ValueGeneratedOnAdd();
entity.Property(e => e.CommodityMaterialID)
.HasColumnName("CommodityMaterialID");
entity.Property(e => e.SpecficWeight)
.HasColumnName("SpecficWeight")
.HasColumnType("decimal(18, 2)");
entity.HasOne(a => a.OmsCommodityMaterial)
.WithOne(b => b.Commodity)
.HasForeignKey<Commodity>(b => b.CommodityMaterialID);
});
Это создает правильную связь, CommodityMaterial (ID) необходим при создании товара.
Теперь я хочу получить все значения / столбцы таблицы Commodity
, а также соответствующие столбцы таблицы CommodityMaterial
(CommodityMaterialID, Name and SortOrder
).После прочтения некоторых других сообщений, которые я обнаружил, что я должен / мог бы использовать Include
для получения связанных данных, моя операция GET выглядит следующим образом:
[HttpGet]
public async Task<IEnumerable<Commodity>> GetTest()
{
return await Context.Commodity.Include(x => x.OmsCommodityMaterials).ToListAsync();
}
Однако, это все еще возвращает только 3 столбца таблицы Commodity.(CommodityID
, CommodityMaterialID
, SpecficWeight
)
Кто-нибудь знает, что я делаю неправильно?
РЕШЕНИЕ
Хорошо, мне немного стыдно, проблема заключалась в том, что я использовал аннотацию DataContract
в своем классе Commodity
POCO, которыйв приведенном выше коде было пропущено, в ссылке OmsCommodityMaterial
отсутствовал атрибут DataMember
, что делало его поля невидимыми ...