如何在MVC模型中创建唯一字段?

时间:2013-10-21 06:27:33

标签: c# asp.net-mvc asp.net-mvc-5

这是我在C#MVC项目中的模型类。我想将会员ID设置为唯一字段?

public class Customer
{
        public int CustomerID { get; set; }
        public string MembershipID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string EmailAddress { get; set; }
}

3 个答案:

答案 0 :(得分:1)

实体框架不支持属性的UNIQUE,因此我们必须为此创建一个函数。 我建议您使用FluentValidation,因为它很容易拿到手

var port = 3000

/*
* Set your server's port. This made mine vpsXXXXXX.vps.ovh.ca:3000. 
* HTTP standard port: 80
* HTTPS standard port: 443
*/

app.listen(port, () => console.log(`Online on port ${port}!`))

您将通过继承

为该类定义一组验证规则
public class Customer
{
        public int CustomerID { get; set; }
        public string MembershipID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string EmailAddress { get; set; }
}

答案 1 :(得分:0)

我只能猜测,因为你没有提到你班上的钥匙。

实体框架根据DataAnnotations不支持unique列。您唯一能做的就是将一列作为主键,并将另一个ID列设为Guid。

假设CustomerID是您的主键:

using System.ComponentModel.DataAnnotations;

public class Customer
{
    [Key]
    public int CustomerID { get; set; }
    public Guid MembershipID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string EmailAddress { get; set; }
}

假设您的MembershipID是您的主键:

using System.ComponentModel.DataAnnotations;

public class Customer
{

    public Guid CustomerID { get; set; }
    [Key]
    public int MembershipID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string EmailAddress { get; set; }
}

通过将其中一列作为guid,您生成相同值的2个键的几率几乎为零。

答案 2 :(得分:0)

public class Customer
{
    public int CustomerId { get; set; }
    public string MembershipId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string EmailAddress { get; set; }
}

public class Company
 {
     public string MembershipId { get; set; }
     public string Name {get; set;}

 }
public class CustomersBankAccount
 {
   public string Name {get; set;}
   public int CustomerId { get; set; }
 }

当您想要使用代码优先约定构建数据库时,惯例是在属性中集成“Id”(外键)部分。    当然,我建议将所有属性声明为虚拟,以便EF可以掌握您的代码并启用某些功能。像一个有效的跟踪机制

因此:如果您在名为ID的对象上有属性,则EF将采用该属性 保存主键值并在SQL Server中设置自动递增(标识)键列 保持财产价值。

编辑:

“对象”意味着客户的对象。实际上,示例中的主键位于customer中,外键位于与customer相关的所有其他表中。主键不能重复或为空。外键 - 是的。同一个客户可能拥有多个银行账户。 :)   因此,如果您想知道,设置密钥的管道在哪里,请停止。 MVC可以查看上面的代码并决定(在脚手架选择中)如何在数据库中制作表格。除了您已经看到的内容之外,您不必在代码中指明任何内容(“Id”即结束)

根据我的评论进行修改:

  public class Customer
{
    public int CustomerId { get; set; }
    [Remote("CheckMembershipIdActionMethod", "CorrespondingController")]
    public string MembershipId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string EmailAddress { get; set; }
}