【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后,并且在上下文文档中声明如下语句:
public DbSet<SharpL> Sharps { get; set; }
在访问数据库后,表格就自动生成了,如图:
5,打开SQL server,打开数据库关系图,如下:
可以看出Memebers表中的NO字段是Guestbooks表中的外键,也就是member_NO字段,也就是说每一个Guestbook对应于一个Member,而一个Member可以有多个Guestbook。代码如下:

public class Member
{
#region 其他字段
[Key]
public int NO { get; set; }
[Required]
[MaxLength()]
public string Name { get; set; } [MaxLength()]
public string Email { get; set; }
#endregion public ICollection<Guestbook> GuestBooks { get; set; }
} public class Guestbook
{
#region 其他字段
[Key]
public int NO { get; set; } [Required]
public string Content { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime? CreateOn { get; set; }
#endregion public Member member { get; set; }
}

6,注意新建Model模型以后,必须编译以后,部分功能才能使用,如在Model文件夹下,新建一个Context类,想开启数据库自动迁移的功能(该功能详见Will哥MVC4 5.5),必须先进行编译,否则在使用 Enbale-Migrations 命令时,是无法通过的。同样的道理是,在为Controller添加强类型视图时,需要先对项目进行编译。
出处:http://www.cnblogs.com/SharpL/p/4592725.html
【MVC】Model的使用的更多相关文章
- ASP.NET MVC Model验证(五)
ASP.NET MVC Model验证(五) 前言 上篇主要讲解ModelValidatorProvider 和ModelValidator两种类型的自定义实现, 然而在MVC框架中还给我们提供了其它 ...
- ASP.NET MVC Model验证(四)
ASP.NET MVC Model验证(四) 前言 本篇主要讲解ModelValidatorProvider 和ModelValidator两种类型的自定义实现,前者是Model验证提供程序,而Mod ...
- ASP.NET MVC Model验证(三)
ASP.NET MVC Model验证(三) 前言 上篇中说到在MVC框架中默认的Model验证是在哪里验证的,还讲到DefaultModelBinder类型的内部执行的示意图,让大家可以看到默认的M ...
- ASP.NET MVC Model验证(二)
ASP.NET MVC Model验证(二) 前言 上篇内容演示了一个简单的Model验证示例,然后在文中提及到Model验证在MVC框架中默认所处的位置在哪?本篇就是来解决这个问题的,并且会描述一下 ...
- ASP.NET MVC Model验证(一)
ASP.NET MVC Model验证(一) 前言 前面对于Model绑定部分作了大概的介绍,从这章开始就进入Model验证部分了,这个实际上是一个系列的Model的绑定往往都是伴随着验证的.也会在后 ...
- ASP.NET MVC Model绑定(六)
ASP.NET MVC Model绑定(六) 前言 前面的篇幅对于IValueProvider的使用做个基础的示例讲解,但是没并没有对 IValueProvider类型的实现做详细的介绍,然而MVC框 ...
- ASP.NET MVC Model绑定(五)
ASP.NET MVC Model绑定(五) 前言 前面的篇幅对于IValueProvider的获取位置和所处的生成过程做了讲解,本篇将会对IValueProvider的使用做个基础的示例讲解,读完本 ...
- ASP.NET MVC Model绑定(四)
ASP.NET MVC Model绑定(四) 前言 前面的篇幅对于Model绑定器IModelBinder以及实现类型.Model绑定器提供程序都作了粗略的讲解,可以把Model绑定器想象成一个大的容 ...
- ASP.NET MVC Model绑定(三)
ASP.NET MVC Model绑定(三) 前言 看过前两篇的朋友想必对Model绑定有个大概的了解,然而MVC框架给我们提供了更高的可扩展性的提供程序编程模式,也就是本篇的主题了,会讲解一下Mod ...
- ASP.NET MVC Model绑定(二)
ASP.NET MVC Model绑定(二) 前言 上篇对于Model绑定的简单演示想必大家对Model绑定的使用方式有一点的了解,那大家有没有想过Model绑定器是在什么时候执行的?又或是执行的过程 ...
随机推荐
- HBase基于region数目和data locality来balance regions
1. 在Hbase的运维过程中,我们经常需要做如下操作: 移动 regionserver 到其他的 regionserver group中 下线一台机器 增加一台机器 移动 table 到其他 re ...
- 最小生成树 - 普里姆 - 边稠密 - O(N ^ 2)
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #define N 1005 #def ...
- JdbcTemplate.queryForObject
} catch (EmptyResultDataAccessException e) { log.info(">>>检测到有无记录>>>>" ...
- learning shell built-in variables (1)
Shell built-in variables [Purpose] Learning shell built-in variables, example $0,$1,$2,$3,$#, ...
- git reset --hard和git revert命令
git reset --hard和git revert命令 git误操作时可以用git reset –hard 去撤销这次修改, 但是这样做也有问题,可能在之前本地有没有提交的修改也都消失了, ...
- ural1469
题解: 从左往右加入每一个点 判断一下和,pre,nxt是否相交 删除得时候也要判断 代码: #pragma GCC optimize(2) #include<cstdio> #inclu ...
- 所谓的规范以及JDK api文档的重要性
所谓的规范,就是在jee api 文档里对应的接口. 可以从jdk文档和jee文档的目录结构,接口中获取对整个编程范围的把握
- @one to many 和 @many to one小例子
一个机构 : 多个用户 OrgTable实体类 :User实体类 OrgTable.java(一) 注解@OnetoMany,mappedBy=“org”,就是由“多”的那端维护(下面User类定义 ...
- CodeIgniter $this->db->where()的自定义语句写法问题
.自定义字符串:你可以手动的编写子句:$where = "name='Joe' AND status='boss' OR status='active'"; $this->d ...
- 调用Nt函数内核模式切换问题
很久不写博客了,笔记大多记在电脑上在,以后整理好了再搬运上来吧. 今天记一下“进程内存管理器”这个小程序上遇到的一个问题——内核模式调用Nt*函数. 使用的是内核中的NtQueryVirtualMem ...