[mvc]MVC_Model

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     }
View Code

6,注意新建Model模型以后,必须编译以后,部分功能才能使用,如在Model文件夹下,新建一个Context类,想开启数据库自动迁移的功能(该功能详见Will哥MVC4 5.5),必须先进行编译,否则在使用 Enbale-Migrations 命令时,是无法通过的。同样的道理是,在为Controller添加强类型视图时,需要先对项目进行编译。

原文地址:https://www.cnblogs.com/SharpL/p/4592725.html