gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 03:04:01 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com