如何在EF CodeFirst中使用唯一约束
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在EF CodeFirst中使用唯一约束相关的知识,希望对你有一定的参考价值。
参考技术A 使用唯一约束的两种方式:方式1 自定义唯一约束
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public class UniqueAttribute : ValidationAttribute
public override Boolean IsValid(Object value)
//校验数据库是否存在当前Key
return true;
View Code
在Model类中使用
public class Email
[Key]
public int EmailID get; set;
public int PersonId get; set;
[Unique]
[Required]
[MaxLength(100)]
public string EmailAddress get; set;
public virtual bool IsDefault get; set;
public virtual Boolean IsApprovedForLogin get; set;
public virtual String ConfirmationToken get; set;
[ForeignKey("PersonId")]
public virtual Person Person get; set;
View Code
EF Codefirst 验证唯一属性?
【中文标题】EF Codefirst 验证唯一属性?【英文标题】:EF Codefirst validate unique property? 【发布时间】:2011-02-06 17:16:49 【问题描述】:对如何有效地验证 CodeFirst 模型的给定属性是否唯一感到好奇。经典示例是成员的用户名或显示名称。
传统上,我可以通过在数据库中设置唯一约束来做到这一点,或者在尝试插入操作期间进行查找。我知道如何在生成后手动将这些东西添加到数据库中,只是想看看是否有办法将其作为框架提供的架构映射的一部分。
更新 我发现我可以覆盖 DbContext 上的 ValidateEntity 方法,这在概念上允许我进行查找然后使对象无效以防止保存。我仍然很想知道是否有办法在数据库中应用唯一约束或类似的约束
【问题讨论】:
【参考方案1】:Code First(以及一般的 EF)仍然 本身并不支持唯一约束。在this post 中,我展示了一种创建它们的方法,同时您的数据库由 Code First 创建(通过自定义 Initializer 类中的 SQLCommand 方法),但它与手动创建它并没有真正的不同。另一种方法是您建议的ValidateEntity
,但无论如何我仍会在数据库上创建唯一约束。
【讨论】:
【参考方案2】:我已在 code project
上发布了相关信息一般来说,这取决于您放在类上的属性来生成唯一索引
【讨论】:
以上是关于如何在EF CodeFirst中使用唯一约束的主要内容,如果未能解决你的问题,请参考以下文章
EF Core 中是不是有用于唯一约束的数据注释(代码优先)?