繁体   English   中英

有没有办法限制实体框架中的列的值?

[英]Is there a way to restrict value of a column in Entity Framework?

我想限制实体框架中实体的属性值。

例如:

public class Position: EntityBase
{
    [AnAtribute("Values:1,2,3")]
    public int Status { get; set; }
    public string ReferenceCode { get; set; }
    public string Location { get; set; }
    public string Content { get; set; }
}

值也可以来自枚举。

在此表中,“ Status列可以具有值; 1,2或3.否则EF会抛出异常。

我可以制作Status表并定义所有状态。 但我不想每次都加入那张桌子。 所以这不是一个选择。

我试过这个并且它可以工作。虽然保存到Db它也给我验证错误。 请检查这是否有用。

 public class RangeTest
{
    [Key]
    [Range(1, 3)]
    public int ProjectId { get; set; }

}

在此输入图像描述

使属性为Enum并定义该枚举。

public enum Status
{
  SomeStatusA = 1,
  SomeStatusB = 2,
  SomeStatusC = 3,
}
public class Position: EntityBase
{
   public Status Status { get; set; }
   public string ReferenceCode { get; set; }
   public string Location { get; set; }
   public string Content { get; set; }
}

您还可以在状态表(您提到有一个)上添加外键约束 ,这会阻止您在命中数据库时添加/更新超出范围的状态值。

你需要的是CHECK CONSTRAINT 在SQL中,您可以通过这种方式更改表

ALTER TABLE Position
   ADD CONSTRAINT CK_Position_Status CHECK (Status IN (1, 2, 3))

EF目前不支持。 即没有一些属性或配置允许您生成具有检查约束的表或更改现有表。 但您可以在迁移中手动添加此类约束:

migrationBuilder.Sql(@"ALTER TABLE Position
     ADD CONSTRAINT CK_Position_Status CHECK (Status IN (1, 2, 3))");

另外我建议您使用枚举而不是整数作为状态字段(如果可能的话)。 因此,没有人会“猜测”哪些值应该是有效的,哪些值不是。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM