У меня есть таблица (Commodity
), которая имеет отношение один к одному с другой таблицей (CommodityMaterial
), в моей конечной точке GET Commodity возвращает свои собственные столбцы, а также столбцы (и значения)ссылочная таблица, которая работает отлично.Однако в операции POST конечной точки пользователь не должен иметь возможность POST-данных справочной таблицы (CommodityMaterial
), как этого достичь?Я использовал для отключения этого с помощью DataContract, однако, потому что мне нужны столбцы для моего оператора GET, это не вариант.
Я уже пытался, следуя этому сообщению: https://csharp.christiannagel.com/2016/11/07/efcorefields/, удаление SET из справочной таблицы и создание вспомогательного поля, но это, похоже, не работает (ошибка, что вспомогательное поле доступно только для чтения).
Я также пытался установить SET на защищенный, но это не работает.
Итак, вопрос в том, как сделать справочную таблицу доступной только для чтения (доступно только для моей конечной точки GET, а не для моей конечной точки POST).
Товарный класс POCO:
[DataContract]
public class Commodity
{
public Commodity()
{
}
public Commodity(CommodityMaterial commodityMaterial)
{
CommodityMaterial = commodityMaterial;
}
[DataMember]
public long CommodityID { get; set; }
[DataMember]
public long CommodityMaterialID { get; set; }
[DataMember]
public decimal? SpecficWeight { get; set; }
[DataMember]
public CommodityMaterial CommodityMaterial { get; }
}
Свободная часть:
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.CommodityMaterial)
.WithOne(b => b.Commodity)
.HasForeignKey<Commodity>(b => b.CommodityMaterialID);
});