3 回答
TA贡献1786条经验 获得超13个赞
您可以Unique使用 Both来创建模型属性DataAnnotation,FluentApi如下所示:
使用数据注释:
[Required]
[StringLength(30)]
[Index("Ix_UserName",Order =1,IsUnique =true)]
public string UserName { get; set; }
使用流畅的 API:
在实体框架 >= 6.2 中,
在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();
}
在实体框架 < 6.2
在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>
TA贡献1887条经验 获得超5个赞
RemoteAttribute与实体框架没有任何关系。它只是忽略了这个属性。此外,正如文档所说,它是一个jQuery验证属性,它应该只在前端部分起作用。
如果User同时是 MVC 模型和数据库实体,则应为属性创建唯一索引。一种方法是OnModelCreating在你的方法中DbContext:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<User>().HasIndex(x => new { x.Username }).IsUnique();
}
然后创建一个迁移,将它应用到数据库,你就可以开始了。但是,请注意保存副本时会遇到的异常,并确保正确处理它。
TA贡献1757条经验 获得超7个赞
我在 HomeController 中创建了一个方法
public bool IsUserExist(string email)
{
return db.Users.Where(c => c.Email == email).IsAny();
}
并在行动
if( IsUserExist(model.Email) )
{
// my code
}
- 3 回答
- 0 关注
- 102 浏览
添加回答
举报