数据库优先方法中的唯一约束

时间:2014-01-25 09:58:32

标签: c# sql-server entity-framework

我的数据库有许多独特的约束条件。

我知道实体框架对它们一无所知。所以我需要手动将它们添加到模型中。但是在

System.ComponentModel.DataAnnotations

没有唯一关键字。

我创建了新属性:

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public class UniqueKeyAttribute : Attribute
{
}

并将其添加到我的模型中:

[MetadataType(typeof(DeviceInstance))]
public partial class DeviceInstance
{
    public int Id { get; set; }
    [Required]
    public int DeviceId { get; set; }
    [Required]
    [UniqueKey]
    [MaxLength(50)]
    public string SerialNo { get; set; }
    [Required]
    public System.DateTime CreationDate { get; set; }
}

即便如此 即使表中已存在该值,Model.IsValid也始终返回true。

我应该编写什么代码来改变这种行为?

1 个答案:

答案 0 :(得分:3)

您的问题的一个简单答案是Entity框架不支持唯一键,因此唯一的方法是设置数据库中的唯一约束(实际上就是这样)。通过这样做,当您尝试在DB中插入/更新新行时,如果缺乏唯一性,则会抛出适当的异常,然后您可以捕获并处理这些异常。

相关问题