将引用 table 数据设为只读 - EF Core
Make reference table data read-only - EF Core
我有一个 table (Commodity
),它与另一个 table (CommodityMaterial
) 具有一对一关系,在我的 GET 端点中商品returns 它有自己的列以及引用的 table 的列(和值),效果很好。但是,在端点的POST操作中,用户不应该能够POST引用table(CommodityMaterial
)的数据,这如何实现?我曾经使用 DataContract 来禁用它,但是,因为我需要 GET 运算符的列,所以这不是一个选项。
我已经尝试过,遵循此 post:https://csharp.christiannagel.com/2016/11/07/efcorefields/,删除引用 table 上的 SET 并创建一个支持字段,但这似乎不起作用(错误是支持字段是只读的)。
我也试过将 SET 设置为受保护,但这不起作用。
所以问题是,如何使引用 table 只读(仅适用于我的 GET 端点而不适用于我的 POST 端点)。
商品 POCO class:
[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);
});
您的操作接受的参数应代表您的操作 does/is 允许执行的操作。如果客户端不应该能够更新相关实体,那么您将请求正文绑定到的 class 不应该有该实体可用。使用视图模型,本质上:
public class CommodityRequest
{
// all properties you want editable
// exclude `CommodityMaterial` obviously
}
然后:
public IActionResult Update(CommodityRequest model)