实体框架和约束

时间:2018-07-23 15:31:33

标签: c# database entity-framework ef-code-first constraints

我想为数据库写约束。即我的实体类有2个字段:

public int DriverCompensationTypeId { get; set; }
public decimal? CompensationRate { get; set; }

我要指定:

  1. DriverCompensationTypeId的唯一允许值为0, 1, 2, 3

  2. CompensationRate如果为null,则应始终为DriverCompensationTypeId == 0;在所有其他情况下,均不应为null

如何写这些约束?

1 个答案:

答案 0 :(得分:0)

提到的枚举Felix Castor是将DriverCompensationTypeId的允许值强制设置为0到3。它仍然存储为int,即枚举的作用:)

为DriverCompensationTypeId使用属性设置器是通过代码将CompensationRate设置为null的一种方法。

(SQL Server)创建添加/更新触发器,用于在存储数据之前验证和/或调整数据。代码更改包括处理数据库错误。

在业务层而不是实体中放置业务规则是更好的方法。然后,您可以在映射/验证代码中添加...

CompensationRate = DriverCompensationTypeId == 0 ? null, CompensationRate;

当然,如果您决定使用枚举,则可以用枚举值代替“ 0”

插件:创建新实体/属性时,您具有更大的灵活性方法来实现业务规则。一旦属性(字段)存在,那么您所涉及的工作就会受到更多限制。 “关注点分离”原则几乎像like(像是一个实体的数据访问,其他实体的数据访问)一样成簇。

业务规则应较少关注数据的存储方式或访问方式。如果您采用这种原理/模式,那么您很可能希望将所有验证和业务逻辑分组到单个层中,我发现以后更容易查找和维护。

这并不意味着您不进行客户端验证,这有助于在不涉及服务器往返的情况下立即向用户提供快速反馈。但是您始终必须进行服务器端验证,以防止发生各种黑客攻击。 UI =便利,Server =安全/一致性。