zoukankan      html  css  js  c++  java
  • MVC-CodeFirst(一)

    MVC-CodeFirst(一)

      最近刚做完一个Web的项目,不过也是第一次接触MVC,做完以后对MVC朦朦胧胧,所以在此就查了好多资料,看了好多大牛的博客,也不知道最近为什么这么多MVC系列,不过刚好有助于我的学习,顺便自己也记录一些学到的东西,不过还是有很多不懂的地方,如果有大牛路过,请指点一二。

    CodeFirst

      建了三个项目,分别是DAL(DB层),ModelEntities(实体层),MyWeb.EntitiesConfiguration(实体配置层)。

    ModelEntities

      简单的建立了几个表,主要是想分别体现一对多,多对多的特征和写法。

    User实体

     1     [Table("t_User")]
     2     public class User
     3     {
     4         [Key]
     5         [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
     6         public int Id { get; set; }
     7 
     8         public string Name { get; set; }
     9 
    10         public string UserName { get; set; }
    11 
    12         public string Password { get; set; }
    13 
    14         public virtual ICollection<Employee> CreatorList { get; set; }
    15 
    16         public virtual ICollection<Employee> ModifiedPersonList { get; set; }
    17     }
    View Code

    Employee实体

     1     [Table("t_Employee")]
     2     public class Employee
     3     {
     4         public Employee()
     5         {
     6             this.WorkRecordList = new HashSet<WorkRecord>();
     7             this.ContractList = new HashSet<Contract>();
     8             this.EnrollmentList = new HashSet<Enrollment>();
     9         }
    10 
    11 
    12         [Key]
    13         [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    14         public int Id { get; set; }
    15 
    16         [StringLength(20,ErrorMessage="员工姓名最大长度为50!")]
    17         [Display(Name="员工姓名")]
    18         public string EmployeeName { get; set; }
    19 
    20         [StringLength(20,ErrorMessage="联系方式最长为20!")]
    21         [Display(Name= "员工联系方式")]
    22         public string EmployeePhone { get; set; }
    23 
    24 
    25         [ForeignKey("Creator")]
    26         public int CreatorId { get; set; }
    27 
    28         //ON DELETE NO ACTION 或 ON UPDATE NO ACTION
    29         [ForeignKey("ModifiedPerson")]
    30         public int ModifiedPersonId { get; set; }
    31 
    32         public virtual User Creator { get; set; }
    33 
    34 
    35         public virtual User ModifiedPerson { get; set; }
    36 
    37         public virtual ICollection<Enrollment> EnrollmentList { get; set; }
    38 
    39         public virtual ICollection<Contract> ContractList { get; set; }
    40 
    41         public virtual ICollection<WorkRecord> WorkRecordList { get; set; }
    42     }
    View Code

    Job实体

     1     [Table("t_Job")]
     2     public class Job
     3     {
     4         [Key]
     5         [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
     6         public int Id { get; set; }
     7 
     8         [Display(Name = "职位名称")]
     9         public string JobName { get; set; }
    10 
    11         public virtual ICollection<Enrollment> EnrollmentList { get; set; }
    12     }
    View Code

    Enroollment实体

     1     [Table("t_Enrollment")]
     2     /// <summary>
     3     /// 关系(员工和职位,多对多的关系)
     4     /// </summary>
     5     public class Enrollment
     6     {
     7         [Key]
     8         [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
     9         public int Id { get; set; }
    10 
    11         /// <summary>
    12         /// 职工Id
    13         /// </summary>
    14         [ForeignKey("Employee")]
    15         [Display(Name="员工Id")]
    16         public int EmployeeId { get; set; }
    17 
    18         [ForeignKey("Job")]
    19         public int JobId { get; set; }
    20 
    21 
    22         public virtual Employee Employee { get; set; }
    23 
    24         public virtual Job Job { get; set; }
    25     }
    View Code

    WorkRecord实体

     1  /// <summary>
     2     /// 一对多(Employee)
     3     /// </summary>
     4     [Table("t_WorkRecord")]
     5     public class WorkRecord
     6     {
     7         [Key]
     8         [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
     9         public int Id { get; set; }
    10 
    11         [ForeignKey("Employee")]
    12         public int EmployeeId { get; set; }
    13 
    14         public DateTime CreatedDate { get; set; }
    15 
    16         /// <summary>
    17         /// 不能包含“@”,并不能为空
    18         /// </summary>
    19         [ValidationAttributeHelper]
    20         public string WorkContent { get; set; }
    21 
    22         public virtual Employee Employee { get; set; }
    23     }
    View Code

    Contract实体

     1 /// <summary>
     2     ///  合同表(一对多Employee)
     3     /// </summary>
     4     [Table("t_Contract")]
     5     public class Contract
     6     {
     7         [Key]
     8         [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
     9         public int Id { get; set; }
    10 
    11         public string ContractName { get; set; }
    12 
    13         [ForeignKey("Employee")]
    14         public int EmployeeId { get; set; }
    15 
    16         public virtual Employee Employee { get; set; }
    17     }
    View Code

    各个配置的含义

    [Table("t_User")]该表在数据库中的名称为“t_User”;

    [Key]该字段为主键;

    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]该字段为自增;

    [ForeignKey("Employee")]该字段为外键,对应虚的属性public virtual Employee Employee { get; set; },也就是该字段是Employee的外键;

    [Display(Name="员工姓名")]该字段显示的内容;

    [StringLength(20,ErrorMessage="员工姓名最大长度为20!")]该字段的长度,如果超出,提示相应的错误;

    1  [ForeignKey("Creator")]
    2 public int CreatorId { get; set; }
    3 public virtual User Creator { get; set; }

    属性Creator是外键User,可以没有CreatorId这个字段,数据库会自动创建一个名为“Creator_Id”的字段,设为外键,与User管理,不过不建议这样做,一方面命名不是自己的,另一方面使用不方便;

    1 public virtual ICollection<Employee> CreatorList { get; set; }

    Employee表与User关联的同时,也需要在User表里建立User一对多属性,否则会建立失败;

    [ValidationAttributeHelper]该字段需符合该规则,这个规则是自己定义的,也是在看一位大牛的文章的时候看到的,就自己也写了一个,具体代码:

     1  /// <summary>
     2     /// 创建已定义验证
     3     /// </summary>
     4     public class ValidationAttributeHelper : ValidationAttribute
     5     {
     6         protected override ValidationResult IsValid(object value, ValidationContext validationContext)
     7         {
     8             //检查是否为空值
     9             if (value == null)
    10             {
    11                 return new ValidationResult("不能为空!");
    12             }
    13             else
    14             {
    15                 if (value.ToString().Contains("@"))
    16                 {
    17                     return new ValidationResult("不能包含@符号");
    18                 }
    19             }
    20             return ValidationResult.Success;
    21         }
    22     }
    View Code

      先到这吧~

  • 相关阅读:
    centos 新增用户, 然后他在主目录添加网站403Forbbiden
    linux 把用户加入一个组&从这个组中移除
    [THINKPHP] 温故知新之getFieldBy
    php 获取指定月份的开始结束时间
    apache 占用内存总量与每个apache进程的平均内存占用量计算
    网站并发300就很慢
    centos定时备份数据库超简单示例
    php导出excel时间错误(同一个时间戳,用date得到不同的时间)
    设置iframe 载入页面的效果跟直接打开这个页面一样
    node基础09:第2个node web服务器
  • 原文地址:https://www.cnblogs.com/shadow-fei/p/4660908.html
Copyright © 2011-2022 走看看