簡體   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