Database design asp.net mvc 4-多用户类图

Database design asp.net mvc 4-多用户类图,database-design,user-controls,asp.net-mvc-4,uml,class-diagram,Database Design,User Controls,Asp.net Mvc 4,Uml,Class Diagram,我一直在寻找这个话题,但没有找到我想要的。 基本上,我开始计划一个包含所有UML内容、用例、类图等等的项目。 然后我们决定使用ASP.NETMVC。该应用程序是一种O-Desk或Elance 我有用户、承包商、公司、主持人和管理员 我有点困惑模型应该如何表示这些用户,以及如何使用asp.net mvc特性设置特权和角色 在一个普通的应用程序中,我会为它们中的每一个设置一个类,它们可能会扩展User,其中包含用户名、密码和电子邮件 在承包商类别中,我有关于承包商的所有信息,如他申请的工作、他的简历

我一直在寻找这个话题,但没有找到我想要的。 基本上,我开始计划一个包含所有UML内容、用例、类图等等的项目。 然后我们决定使用ASP.NETMVC。该应用程序是一种O-Desk或Elance

我有用户、承包商、公司、主持人和管理员

我有点困惑模型应该如何表示这些用户,以及如何使用asp.net mvc特性设置特权和角色

在一个普通的应用程序中,我会为它们中的每一个设置一个类,它们可能会扩展User,其中包含用户名、密码和电子邮件

在承包商类别中,我有关于承包商的所有信息,如他申请的工作、他的简历等

在Company类中,我发布了报价、公司名称等

那么,最好的做法是什么呢?我这里有一段代码

 public class User
 {
    [Key]
    public string UserID { get; set; }

    [Required(ErrorMessage = "Email is required")]
    [DataType(DataType.EmailAddress, ErrorMessage="Email Format is wrong. Example: user@user.com")]
    [Remote("doesEmailExist", "Contractors", HttpMethod = "POST", ErrorMessage = "Email already exists. Please enter a different one.")]
    public string Email { get; set; }

    [Required]
    [Remote("doesUserNameExist", "Contractors", HttpMethod = "POST", ErrorMessage = "User name already exists. Please enter a different user name.")]
    public string Username { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    public string Password { get; set; }
}
还有一点小疑问,我应该签合同吗?或者我获取用户ID?只是问一下,因为我不知道数据库生成后会是什么样子。不管怎样,我现在要试试这个

public class Contractor extends User
{
    [Key]
    public int ContractorID { get; set; }

    [Required(ErrorMessage = "First Name is required")]
    [StringLength(20, ErrorMessage = "First Name max length is 20 characters")]
    [Display(Name = "First Name")]
    public string FirstName { get; set; }

    [Required(ErrorMessage = "Last Name is required")]
    [StringLength(20, ErrorMessage = "First Name max length is 20 characters")]
    [Display(Name = "Last Name")]
    public string LastName { get; set; }
}


public class Company extends User
{
    [Key]
    public int CompanyID { get; set; }

    [Required(ErrorMessage = "Name of the Company required")]
    public string CompanyName { get; set; }

    private List<Offer> Offers;

    public void AddOffer (Offer offer) {
        Offers.Add(offer);
    }
    public void RemoveOffer(Offer offer)
    {
        Offers.Remove(offer);
    }
公共类承包商扩展用户
{
[关键]
public int ContractorID{get;set;}
[必需(ErrorMessage=“需要名字”)]
[StringLength(20,ErrorMessage=“名字最大长度为20个字符”)]
[显示(Name=“First Name”)]
公共字符串名{get;set;}
[必需(ErrorMessage=“需要姓氏”)]
[StringLength(20,ErrorMessage=“名字最大长度为20个字符”)]
[显示(Name=“Last Name”)]
公共字符串LastName{get;set;}
}
公共类公司扩展用户
{
[关键]
public int CompanyID{get;set;}
[必需(ErrorMessage=“必需的公司名称”)]
公共字符串CompanyName{get;set;}
私人名单优惠;
公开发售(发售){
要约。添加(要约);
}
公开无效移除要约(要约要约)
{
提议。删除(提议);
}
}

感谢您提供的任何帮助或提示!
问候。

我会避免使用model做任何事情。模型用于数据事务,需要反映您的数据库

你有两件事。 -一个是模型,您可以使用该模型以原始状态存储数据 -另一个是视图,您需要在其中显示该信息

那么,该怎么办??简单,首先进行de建模并生成viewModel。viewModel将反映视图及其规则,因此每个视图和局部视图都有一个。使其简单使用模型的编写方式,但去掉视图中的内容(exe:[必需(ErrorMessage=“Last Name is Required”)]),因为您将创建另一个类来保存这些内容,例如,您可以创建一个视图,其中显示两种类型的用户,您可以创建如下内容:

public class CompanyView
{
    private company= new Company();
    private contractor = new Contractor();

    [Display(Name = "Contractor Name")]
    public string ContractorName{ get{return contractor.FisrtName+ contractor.LastName;} }

    public int CompanyID { get{return company.CompanyID;} set{company.CompanyID = value;}}

    [Required(ErrorMessage = "Name of the Company required")]
    public string CompanyName { get{return company.CompanyName;} set{company.CompanyName = value;}}

    private List<Offer> offers;
    public SelectList Offers{ get { return new SelectList(offers, "OfferID", "OfferName", ""); } }

}
公共类公司视图
{
私人公司=新公司();
私人承包商=新承包商();
[显示(名称=“承包商名称”)]
公共字符串ContractorName{get{return contractor.FisrtName+contractor.LastName;}}
public int CompanyID{get{return company.CompanyID;}set{company.CompanyID=value;}}
[必需(ErrorMessage=“必需的公司名称”)]
公共字符串CompanyName{get{return company.CompanyName;}set{company.CompanyName=value;}}
私人名单优惠;
公共选择列表提供{获取{返回新的选择列表(提供,“OfferID”、“OfferName”和“);}
}
或者类似的。关键是,您现在可以创建一个类,该类表示的视图与您在数据库中看到的视图完全相同。这样做,您可以扩展视图,并使用您的模型制作一些东西,以便向用户显示并自动填充。例如,当用户发布带有视图信息的表单时,将返回ViewModel alredy filled。您可以使用viewmodel中的alredy填充模型作为私有来保存所需的任何内容

注意,我注意到在viewmodel中使用了所有contractor字段。想象一下,当您更改公司详细信息时,您只需要显示一些承包商名称。在这种情况下,你不需要从承包商那里保存任何东西,你只需要显示他的名字,在viewmodel中,你只需要输入他的名字来显示,你不需要进行必要的验证,等等。只需显示它是enouth。数据将来自一个查询,您可以在创建viewModel时将其填入构造函数、工厂或任何您想要的内容中

这是令人困惑的,但我希望它能帮助你,如果你不明白的东西,我会努力让它更好。我也为“一般”英语感到抱歉