Fluent验证确保子实体不是最佳实践

时间:2018-03-27 12:09:54

标签: c# asp.net entity-framework

我正在使用实体框架核心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实体(如果我错了,请更正我)?

由于

0 个答案:

没有答案