我想为数据库写约束。即我的实体类有2个字段:
public int DriverCompensationTypeId { get; set; }
public decimal? CompensationRate { get; set; }
我要指定:
DriverCompensationTypeId
的唯一允许值为0, 1, 2, 3
CompensationRate
如果为null
,则应始终为DriverCompensationTypeId == 0
;在所有其他情况下,均不应为null
。
如何写这些约束?
答案 0 :(得分:0)
提到的枚举Felix Castor是将DriverCompensationTypeId的允许值强制设置为0到3。它仍然存储为int,即枚举的作用:)
为DriverCompensationTypeId使用属性设置器是通过代码将CompensationRate设置为null的一种方法。
(SQL Server)创建添加/更新触发器,用于在存储数据之前验证和/或调整数据。代码更改包括处理数据库错误。
在业务层而不是实体中放置业务规则是更好的方法。然后,您可以在映射/验证代码中添加...
CompensationRate = DriverCompensationTypeId == 0 ? null, CompensationRate;
当然,如果您决定使用枚举,则可以用枚举值代替“ 0”
插件:创建新实体/属性时,您具有更大的灵活性方法来实现业务规则。一旦属性(字段)存在,那么您所涉及的工作就会受到更多限制。 “关注点分离”原则几乎像like(像是一个实体的数据访问,其他实体的数据访问)一样成簇。
业务规则应较少关注数据的存储方式或访问方式。如果您采用这种原理/模式,那么您很可能希望将所有验证和业务逻辑分组到单个层中,我发现以后更容易查找和维护。
这并不意味着您不进行客户端验证,这有助于在不涉及服务器往返的情况下立即向用户提供快速反馈。但是您始终必须进行服务器端验证,以防止发生各种黑客攻击。 UI =便利,Server =安全/一致性。