【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     }
复制代码
复制代码

 

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

 

出处:http://www.cnblogs.com/SharpL/p/4592725.html

posted on   jack_Meng  阅读(3882)  评论(0编辑  收藏  举报

编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

支付宝打赏

主题色彩