c# - ASP.NET MVC 4,EF5,模型中的唯一属性 - 最佳实践?

标签 c# asp.net-mvc entity-framework asp.net-mvc-4 entity-framework-5

ASP.NET MVC 4、EF5、代码优先、SQL Server 2012 Express

在模型中实现唯一值的最佳做法是什么?我有一个 places 类,它有一个“url”属性,每个地方都应该是唯一的。

public class Place
{
      [ScaffoldColumn(false)]
      public virtual int PlaceID { get; set; }

      [DisplayName("Date Added")]
      public virtual DateTime DateAdded { get; set; }

      [Required(ErrorMessage = "Place Name is required")]
      [StringLength(100)]
      public virtual string Name { get; set; }

      public virtual string URL { get; set; }
};

为什么不可以在上面放置一个 [Unique] 数据注释?

我看到过 1 或 2 次关于此的讨论,但没有谈到最佳实践。使用 Code First,您能否以某种方式告诉数据库在数据库中的字段上设置唯一约束?

什么是最简单的方法 - 什么是最佳实践?

最佳答案

尽管听起来很疯狂,但当今的最佳做法是使用内置验证,而是使用 FluentValidation .然后代码将非常易于阅读和 super 可维护,因为验证将在单独的类上进行管理,这意味着更少的意大利面条代码。

您要实现的目标的伪示例。

[Validator(typeof(PlaceValidator))]
class Place
{
    public int Id { get; set; }
    public DateTime DateAdded { get; set; }
    public string Name { get; set; }
    public string Url { get; set; }
}

public class PlaceValidator : AbstractValidator<Place>
{
    public PlaceValidator()
    {
        RuleFor(x => x.Name).NotEmpty().WithMessage("Place Name is required").Length(0, 100);
        RuleFor(x => x.Url).Must(BeUniqueUrl).WithMessage("Url already exists");
    }

    private bool BeUniqueUrl(string url)
    {
        return new DataContext().Places.FirstOrDefault(x => x.Url == url) == null
    }
}

关于c# - ASP.NET MVC 4,EF5,模型中的唯一属性 - 最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16678625/

相关文章:

c# - 如何通过 Entity Framework 搜索对象及其子项?

c# - 是什么导致了这个语法错误? oledb INSERT 语句

c# - 我们真的需要对 DLL 进行硬编码吗

asp.net-mvc - 使用将 Ajax 返回到 Ajax.BeginForm 的 onBegin 的函数

c# - 访问其他模型属性的自定义验证方法

c# - WebApi 2.0 项目在哪里存储新用户(使用个人用户身份验证创建时)?

c# - 通过命令行创建 7-Zip 存档时创建逻辑文件夹结构

c# - 错误信息 "Compiler Error Message: CS1525: Invalid expression term ' }'"

asp.net - 将 ViewBag 实例传递到 Razor 中的 HiddenFor 字段

c# - 查看数据库中的数据与 EF 生成的不同