Вы можете сделать свойство модели Unique
, используя Оба DataAnnotation
и FluentApi
следующим образом:
Используя аннотацию данных:
[Required]
[StringLength(30)]
[Index("Ix_UserName",Order =1,IsUnique =true)]
public string UserName { get; set; }
Используя Fluent Api:
В Entity Framework> = 6,2,
In DbContext
:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<User>().Property(u => u.UserName).HasMaxLength(30);
modelBuilder.Entity<User>().HasIndex(u => u.UserName).IsUnique();
}
В Entity Framework <6,2 </strong>
В DbContext
:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<User>().Property(t => t.UserName).HasMaxLength(30)
.HasColumnAnnotation(IndexAnnotation.AnnotationName, new IndexAnnotation(new IndexAttribute("Ix_UserName"){IsUnique = true}));
}
Помните: С атрибутом Index
вы должны также использовать атрибут StringLength
.
Для созданияRemoteAttibute
работает, напишите ваше свойство RemoteAttibute
для UserName
следующим образом:
[Required]
[StringLength(30)]
[Index("Ix_UserName",Order =1,IsUnique =true)]
[Remote("IsUserNameExist", "Home", AdditionalFields = "Id", ErrorMessage = "User Name already exists")]
public string UserName { get; set; }
А затем метод IsUserNameExist
в HomeController
следующим образом:
public JsonResult IsUserNameExist(string UserName, int? Id)
{
var IsUserNameExists = db.Users.Any(x => x.UserName== UserName && x.Id != Id);
return Json(!IsUserNameExists, JsonRequestBehavior.AllowGet);
}
Наконец, убедитесь, что ваше представление содержит следующие jQuery
файлы:
<script src="~/Scripts/jquery-version.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
Теперь все должно работать нормально!