Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何首先在实体框架代码中使属性唯一_C#_Json_Entity Framework_Linq_Ef Code First - Fatal编程技术网

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方法之后尝试修剪方法,看看它是否有效!