SQL Server-验证每个插入中的列

时间:2019-01-09 15:31:46

标签: c# sql-server-2012 entity-framework-core

我正在编写带有SQL Server后端的.net核心2.2 C#代码优先的api。只是要求将api做成多租户api。因此,我向所有数据库表,QueryFilter等添加了TenantId(INT NOT NULL)。一切都按预期工作。

我想确保没有,以后没人会忘记在所有插入片段上添加TenantId。 TenantId将始终是大于零的值。 SQL Server中是否有一种方法可以确保每个表上的每个插入的TenantId值都大于零?

1 个答案:

答案 0 :(得分:1)

首先,似乎TenantId应该是表Tenant的ForeignKey。如果是,那么绝对不能为零或更少,否则:

在列上添加CHECK Constraint

CREATE TABLE your_table (
    TenantId INT NOT NULL CHECK(TenantId > 0)
    ...
)

如果列为NOT NULL,则应在每次插入中插入,否则将引发异常

  

无法将值NULL插入表的'TenantId'列中   'dbo.your_table';列不允许为空。   INSERT失败。

然后,在您的C#代码中使用数据注释属性

[Range(1, Int32.MaxValue)]

或创建自己的内容,例如:[MinValue(1)]

要“确保每个表上的每个插入的TenantId值都大于零”,您还可以将构造函数与私有setter一起使用

public class Model
{
   public Model(int name, int tenantId)
   {
      Name = name;
      if(tenantId <= 0)
      {
          throw new Exception();
      }
      TenantId = tenantId;
   }

   public string Name { get; private set; }
   public int TenantId { get; private set; }
}

或模型中类似此属性的内容

public int TenantId {
    get {
        return _tenantId;
    }
    set {
        if (value <= 0) throw new Exception();
        _tenantId = value;
    }
}