C# 如何首先在实体框架代码中使属性唯一
这是我的用户模型类:C# 如何首先在实体框架代码中使属性唯一,c#,json,entity-framework,linq,ef-code-first,C#,Json,Entity Framework,Linq,Ef Code First,这是我的用户模型类: public class User { public int Id { get; set; } [Required] [MaxLength(100)] public string FullName { get; set; } [Required] [MaxLength(30)] [Remote("IsUsernameExists", "Home", HttpMethod = "Post")] public
public class User
{
public int Id { get; set; }
[Required]
[MaxLength(100)]
public string FullName { get; set; }
[Required]
[MaxLength(30)]
[Remote("IsUsernameExists", "Home", HttpMethod = "Post")]
public string UserName { get; set; }
[Required]
[RegularExpression(@"^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$"]
public string Email { get; set; }
[Required]
[StringLength(maximumLength: 18, MinimumLength = 8)]
public string Password { get; set; }
}
这是主控制器中的IsUsernameExists方法
public JsonResult IsUsernameExists(string UserName)
{
return Json(!db.Users.Any(x => x.Username == UserName), JsonRequestBehavior.AllowGet);
}
但它不起作用。任何进一步的帮助将不胜感激 与实体框架无关。它只是忽略了这个属性。此外,正如文档所述,它是一个jQuery验证属性,应该只在前端部分工作
如果用户既是MVC模型又是数据库实体,则应该为属性创建唯一索引。一种方法是在DbContext中的OnModelCreating方法中:
然后创建一个迁移,将其应用到数据库,就可以开始了。但是,请注意保存副本时会出现异常,并确保正确处理。与实体框架无关。它只是忽略了这个属性。此外,正如文档所述,它是一个jQuery验证属性,应该只在前端部分工作
如果用户既是MVC模型又是数据库实体,则应该为属性创建唯一索引。一种方法是在DbContext中的OnModelCreating方法中:
然后创建一个迁移,将其应用到数据库,就可以开始了。但是,请注意保存副本时将出现的异常,并确保正确处理该异常。您可以使用DataAnnotation和FluentApi使模型属性唯一,如下所示:
[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; }
public JsonResult IsUserNameExist(string UserName, int? Id)
{
var IsUserNameExists = db.Users.Any(x => x.UserName== UserName && x.Id != Id);
return Json(!IsUserNameExists, JsonRequestBehavior.AllowGet);
}
使用数据注释:
使用Fluent Api:
在实体框架>=6.2中
在DbContext中:
请记住:对于索引属性,您还必须使用StringLength属性
要使RemoteAttibute正常工作,请按如下方式编写RemoteAttibute on 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; }
public JsonResult IsUserNameExist(string UserName, int? Id)
{
var IsUserNameExists = db.Users.Any(x => x.UserName== UserName && x.Id != Id);
return Json(!IsUserNameExists, JsonRequestBehavior.AllowGet);
}
然后是HomeController中的IsUserNameExist方法,如下所示:
[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; }
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文件:
现在一切都好了 您可以使用DataAnnotation和FluentApi使模型属性唯一,如下所示:
[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; }
public JsonResult IsUserNameExist(string UserName, int? Id)
{
var IsUserNameExists = db.Users.Any(x => x.UserName== UserName && x.Id != Id);
return Json(!IsUserNameExists, JsonRequestBehavior.AllowGet);
}
使用数据注释:
使用Fluent Api:
在实体框架>=6.2中
在DbContext中:
请记住:对于索引属性,您还必须使用StringLength属性
要使RemoteAttibute正常工作,请按如下方式编写RemoteAttibute on 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; }
public JsonResult IsUserNameExist(string UserName, int? Id)
{
var IsUserNameExists = db.Users.Any(x => x.UserName== UserName && x.Id != Id);
return Json(!IsUserNameExists, JsonRequestBehavior.AllowGet);
}
然后是HomeController中的IsUserNameExist方法,如下所示:
[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; }
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文件:
现在一切都好了 我在HomeController中创建了一个方法
public bool IsUserExist(string email)
{
return db.Users.Where(c => c.Email == email).IsAny();
}
在行动中
if( IsUserExist(model.Email) )
{
// my code
}
我在HomeController中创建了一个方法
public bool IsUserExist(string email)
{
return db.Users.Where(c => c.Email == email).IsAny();
}
在行动中
if( IsUserExist(model.Email) )
{
// my code
}
你说的不工作是什么意思?您是否收到任何异常或错误消息?意外的结果?你需要更具体地说明你的问题,什么都不会发生。当我输入一个已经存在的用户名时,它将进入数据库并记录它是否使用x=>x.username==username.ToLowerInvariant并告诉我它是否有效!仍然没有发生任何事情您的用户名可能也包含空格。您也可以在ToLower方法之后尝试修剪方法,看看它是否有效!你说的不工作是什么意思?您是否收到任何异常或错误消息?意外的结果?你需要更具体地说明你的问题,什么都不会发生。当我输入一个已经存在的用户名时,它将进入数据库并记录它是否使用x=>x.username==username.ToLowerInvariant并告诉我它是否有效!仍然没有发生任何事情您的用户名可能也包含空格。您也可以在ToLower方法之后尝试修剪方法,看看它是否有效!