【发布时间】:2013-05-30 14:25:55
【问题描述】:
我正在寻找一种方法来对我的 EF Code First 数据库表执行一些更智能的唯一约束。
我有两个模型在玩;一个环境和一个租户。
public class Setting
{
public int Id { get; set; }
public string Name { get; set; }
public string Value { get; set; }
public int TenantId { get; set; }
}
public class Tenant
{
///
public int Id { get; set; }
public virtual List<Setting> Settings { get; set; }
///
}
您可能已经猜到,一个 Setting 通过 TenantId 属性链接到它的租户,该属性充当外键并匹配租户的 Id 属性。
我想要实现的是每个租户的设置名称必须是唯一的。例如,您可以在“Tenant01”下有一个名为“SettingA”的设置,在“Tenant02”下有一个名为“SettingA”的设置(每个都是两个单独的实体,在表中具有自己的 Id,因此可以具有不同的值),并且这个合法,但不允许将另一个设置名称“SettingA”添加到已存在的租户的位置。
我可以看到很多方法来通过数据库初始化和添加时检查等方式来强制执行直接唯一性,但没有关于“条件唯一性”的内容。
【问题讨论】:
-
如果我理解得很好,这看起来像是对 [Setting.Name, Setting.TenantId] 对的唯一约束?
-
我几乎 100% 确信没有内置的结构可以执行此操作,但是您可以构建自己的属性来处理它。这将是相当直截了当的。
标签: c# entity-framework ef-code-first constraints code-first