1,Model的职责:
Model只负责与数据处理相关的工作。
2,开发Model的基本观念
采用ORM信息访问技术开发
ORM是将结构化的关系型数据,映射成面向对象模型。对于EF来说,就是关系型数据库与.NET原生对象的转化。
3,从一个简单的.NET类别,通过EF转换到SQL Server数据库
- 默认情况下,名称为Id的属性在数据库中创建完成之后,会被标识成主键,且需被设置为Int类型,因为是值类型,不允许为Null。
- 同理DateTime也是值类型,不允许为Null。
- string为引用类型,转换为数据库类型为nvarchar(Max),允许为空。
- 任何EF中的模型,均需要设置主键,否则会触发异常,默认情况下主键为声明为id的int类型属性。如果想设置其他属性为主键,需添加[Attribute]属性。
- 如果设置的任意主键为int类型,会被自动加上自动编号的属性(即我们常说的主键+1)。
- 如果设置某一列不允许为空,为该列添加[Required]属性。
- 声明允许NULL字段,比如DateTime默认不允许为空,如下设置:public DateTime? CreateOn{get;set;}
- 设置字符串长度,添加MaxLength属性,[MaxLength(200)]
- 声明字段默认值,比如说添加到数据库的时间,AddTime,取数据库当前时间就可以了。添加如下属性:[DatabaseGenerated(DatabaseGeneratedOption.Computed]
4,在CodeFirst模式中,声明Model后,并且在上下文文档中声明如下语句:
1 public DbSet<SharpL> Sharps { get; set; }
在访问数据库后,表格就自动生成了,如图:
5,打开SQL server,打开数据库关系图,如下:
可以看出Memebers表中的NO字段是Guestbooks表中的外键,也就是member_NO字段,也就是说每一个Guestbook对应于一个Member,而一个Member可以有多个Guestbook。代码如下:
1 public class Member 2 { 3 #region 其他字段 4 [Key] 5 public int NO { get; set; } 6 [Required] 7 [MaxLength(5)] 8 public string Name { get; set; } 9 10 [MaxLength(200)] 11 public string Email { get; set; } 12 #endregion 13 14 public ICollection<Guestbook> GuestBooks { get; set; } 15 } 16 17 public class Guestbook 18 { 19 #region 其他字段 20 [Key] 21 public int NO { get; set; } 22 23 [Required] 24 public string Content { get; set; } 25 [DatabaseGenerated(DatabaseGeneratedOption.Computed)] 26 public DateTime? CreateOn { get; set; } 27 #endregion 28 29 public Member member { get; set; } 30 }
6,注意新建Model模型以后,必须编译以后,部分功能才能使用,如在Model文件夹下,新建一个Context类,想开启数据库自动迁移的功能(该功能详见Will哥MVC4 5.5),必须先进行编译,否则在使用 Enbale-Migrations 命令时,是无法通过的。同样的道理是,在为Controller添加强类型视图时,需要先对项目进行编译。
出处:http://www.cnblogs.com/SharpL/p/4592725.html