Сделать справочную таблицу доступной только для чтения - EF Core - PullRequest
0 голосов
/ 11 июня 2018

У меня есть таблица (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);

            });

1 Ответ

0 голосов
/ 11 июня 2018

Параметры, которые принимает ваше действие, должны представлять, что ваше действие может делать / разрешено делать.Если клиент не должен иметь возможность обновлять связанную сущность, то класс, к которому вы привязываете тело запроса, не должен иметь эту сущность доступной.Используйте модель представления, по существу:

public class CommodityRequest
{
    // all properties you want editable
    // exclude `CommodityMaterial` obviously
}

Тогда:

public IActionResult Update(CommodityRequest model)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...