我正在编写带有SQL Server后端的.net核心2.2 C#代码优先的api。只是要求将api做成多租户api。因此,我向所有数据库表,QueryFilter等添加了TenantId(INT NOT NULL)。一切都按预期工作。
我想确保没有,以后没人会忘记在所有插入片段上添加TenantId。 TenantId将始终是大于零的值。 SQL Server中是否有一种方法可以确保每个表上的每个插入的TenantId值都大于零?
答案 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;
}
}