我正在使用实体框架核心2在asp.net core 2.0上开发完整的堆栈webapi。
关于传入请求的数据验证,我有一个问题是什么是最佳做法。
我有以下课程;
public class TradeCategory : AuditableEntity
{
public string Name { get; set; }
public int Value { get; set; }
public Language Language { get; set; }
}
对于我的流利验证器,我想确保在插入TradeCategory时,与之关联的语言不为空。我还想确保语言仅被引用而不是更新。
因此,例如,如果以下内容通过以下json传递给我的webapi;
[{
Name: "Test Name",
Value: 5,
Language {
Id: 1,
Name: "Changing the Name"
}
}]
所以我想避免让发布该功能的人在添加TradeCategory时插入新语言,也不希望他们更新现有语言。
我想可以添加更改我的TradeCategory;
public class TradeCategory : AuditableEntity
{
public string Name { get; set; }
public int Value { get; set; }
[ForeignKey("Language")]
public int LanguageId { get; set; }
public Language Language { get; set; }
}
但我喜欢保持班级干净的想法。到目前为止,我有;
public TradeCategoryValidator()
{
RuleFor(x => x.Name).NotNull();
RuleFor(x => x.Value).NotNull();
RuleFor(x => x.Language).NotNull()
.Must(x => x.Id > 0)
.Must(x => x.Country == null);
}
我是否应过度关注此问题,还是应该在服务级别和插入点控制此问题?即如果语言完全填充等,则抛出错误?好像在上面的示例中,我发布到EF,子实体将更新所有语言详细信息以及TradeCategory实体(如果我错了,请更正我)?
由于