这是我在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; }
}
答案 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; }
}