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     }

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     }

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     }

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     }

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     }

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     }

各个配置的含义

[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     }

  先到这吧~

时间: 2024-10-29 11:58:49

MVC-CodeFirst(一)的相关文章

ASP.NET MVC——CodeFirst开发模式

Entity Framework框架提供了几种开发模式,比如Database First,Model First,Code First.Database First是最老也是应用得最广泛的一种设计方式.Database First这种方式的设计高度依赖于数据库中表的结构,根据表及表间的关系来创建模型.如果后期需求有所变更或者功能有很大变化的话,需要涉及到更改数据库所付出的代价将会很大,因为之前编写好的代码将不再适用于新的表,我们必需重构以更改代码中的逻辑以适应更改之后的表.Model First

仓储模式在MVC中的应用学习系列

好久没写博客了,学习的东西,还是需要记录下来,自己懂还得懂得表达出来,这才是最重要的.好了废话说多了,现在开始正题.     在这个系列中,我会把仓储模式和工作单元在MVC应用程序中的应用写出来.有不对的地方,欢迎大家指正. 目录 1.仓储模式在MVC应用程序中的使用 2.泛型仓储模式在MVC应用程序中的使用 3.MVC Code-First和仓储模式的应用 4.待续....

asp.net MVC Model 类的主键 int类型、string类型、GUID类型。

在使用asp.net mvc进行定义 模型类的时候,一般情况下,我们都会定义一个属性为 int iD{get;set;} 或为int ClassNameID {get;set;},在这种情况下 1.Int类型主键 EF的默认约定就是第一个属性如果是类名+id或是id(这两情况下id字母大小写没有关系),并且是int类型的,那么直接设置第一个属性为主键,同时设置自增长.不需要指定[Key]关键字(在 System.ComponentModel.DataAnnotations.Schema命名空间下

1.仓储模式在MVC应用程序中的使用

目录 1.仓储模式在MVC应用程序中的使用 2.泛型仓储模式在MVC应用程序中的使用 3.MVC Code-First和仓储模式的应用 4.待续.... 这篇文章中,我会解释仓储模式在MVC程序中的使用. 首先,我们需要理解什么是仓储模式[repository Pattern],来看看下面的图片 没有使用仓储模式的MVC应用程序:      使用了仓储模式的MVC应用程序: 仓储模式,是一个抽象层,它将数据库的访问逻辑,映射到实体的访问逻辑. 下面,我们来看做一个应用程序,来体验一下仓储模式吧.

ASP.NET MVC 之CodeFirst 数据迁移

CodeFirst模式下如果 一个 类的属性 增加或者删除 那么 与其对应的 就是 数据库中所对应的 字段 增加或者删除 一个属性变化还好 ,我们直接可以到数据库中找到 ,所对应的表中,对其修改,那么 一次对多个类中的属性做修改,如果 手动 来操作是件很头疼的事情 那么数据迁移 很轻松的解决 问题 以下是 我建立的上下文 TestEF 用于测试 用的 班级类 老师类 namespace WebApplication2 { using System; using System.Collection

新年奉献MVC+EF(CodeFirst)+Easyui医药MIS系统

本人闲来无事就把以前用Asp.net做过的一个医药管理信息系统用mvc,ef ,easyui重新做了一下,业务逻辑简化了许多,旨在加深对mvc,ef(codefirst),easyui,AutoMapper,Ninject等技术的理解和运用,今天拿出来跟大家分享,就是想对这些技术还处在入门阶段的朋友做以参考,以及正在用这些技术做项目的朋友做一个交流和探讨. 我会在此项目的基础上去逐一讲解这些技术,简单应用就不讲了,去看项目,主要讲重点难点以及需要注意的地方,有些地方不明白的可以去下载源代码,估计

ioc初步理解(一) 简单实用aotufac搭建mvc三层+ioc(codeFirst)

1]首先搭好框架 1.1]搭建ui层 1.2]创建其他内库文件 整个项目基本部分搭建完毕之后如下 2]使用nuget引用文件 先在每一个项目中引入ef 然后再UI层引入以下两个文件autofac和Autofac.Mvc5 3]因为本demo实用codefirst,所以先去model层完善 3.1]创建几个model 创建一个  User.cs.里面放几个属性 id.name.pwd. 3.2]创建DBContext.cs这个文件的作用是自动生成数据库 内容如下 3.3]创建DbModelCont

分享基于.NET MVC+EF CodeFirst+IOC+EasyUI的框架设计

**注:要做工,没什么时间,等有空时会上传到GIT,项目结构如上,简单的说一下: **支持IOC及多数据库等,各项目由MVC区域隔离: 主要使用基于接口与抽象类进行高度的抽象与接口隔离,与其它框架比较优点如下: 1,抽象度非常高,接口隔离,项目清晰完整,任何一部分均可且容易替换:一开始就非常注重非陷入复杂化: 2,框架非常易用,且易于扩展:编程新手也可立即上手使用: 3,设计目标为:轻量化.高抽象度.可扩展性.模块任意替换.清晰简洁易用(易懂.代码量要少[没必要码农]): **NetDevelo

MVC+EF6使用MySQL+CodeFirst的详细配置

环境: WIN7(64位旗舰版)+VS2012+MySQL5.6(32位版,在另一台服务器中,环境是win2003) 1.下载并安装MysqlforVisualStudio.zip,此软件功能是让VS2012能在数据源中找到MySQL Database,其是否必须我没做试验,因为操作麻烦,还得卸载什么的. 2.打开VS2012,新建一个MVC4空项目 3.点菜单“工具”-“NuGet程序包管理器”-“管理解决方案的NuGet程序包” 4.搜索EF6并安装(不截图了,自己操作吧,在“联机”中查找就

mvc+webapi+dapper+ef codefirst项目搭建

首先项目是mvc5+webapi2.0+orm数据处理(dapper)+ef动态创建数据库. 1.项目框架层次结构: mvc项目根据不同的业务和功能进行不同的区域划分[今后项目维护起来方便],model数据结构和mvc传递model进行区分[保证数据结构不外漏],webapi包括接口定义和 接口的实现,业务逻辑的处理.其中数据处理单独放在webapi之外的类库里面. 2.命名规范 以上大致是文件夹与类库的命名.其中业务和功能以三个字母进行命名. 以上为区域命名 3.开发规则与技巧 <一>命名空