1>ASP.NET MVC开发中模型的实现方法
模型的实现方法
两种方法1手动2自动(工具 EF)
1.1手动创建模型(写好模型元数据)【练习过了 项目!】
前提条件:先手动创建数据库和表
(模型:实体类,实体访问类,Sqlhelper)
(Sqlhelper使用ADO.NET传统方法实现)
1.2使用EF(Entity Framework:实体框架)创建模型
2>EF的概念
2.1什么是EF
***EF是 实体框架 (Entity Framework)的简称,
***EF 可以用来定义模型类并操作数据。(生成模型层)
***EF是微软自己的ORM 。
ORM:对象关系映射(Object Relational Mapping )的简称,
实现 程序对象到关系数据库数据的相互转换
(根据表生成实体类+数据访问类(数据上下文))
优点:
实现生成模型的半自动化,提升开发效率
ORM让程序员尽可能以OO的方式操作数据库,sql尽可能少
(便于团队开发,分工)
***(了解)EF属于.NET Framework包含的组件,
安装ASP.NET MVC3时会自动安装EF ,EF程序集自动加 到项目中了
EF推出较晚,但发展较快,配置简单,学习容易,
对sql server的支持非常好
EF适合中小型、业务简单的系统,它能够提升开发效率,
为程序员分担繁琐的工作。
2.2EF的方法
方法1:数据库优先的开发模式
先手动创建数据库和表,
然后用EF创建模型
方法2:代码优先(“code-first”) 的开发模式
先手动创建模型,
然后用EF(根据模型)创建数据库
(了解):
EF 包含ObjectContext 和DbContext ,两者的区别
ObjectContext是一种数据库优先的开发模式
System.Data.Objects.ObjectContext
DbContext是代码优先的开发模式
System.Object??System.Data.Entity.DbContext
3>使用数据库优先的开发模式做项目
例如:开发航班信息管理系统,
使用数据库优先的开发模式做
(学生信息,好友,照片)
注意1:在同一个项目中,只能使用一种开发模式
使用数据库优先,就不能使用代码优先
注意2:如果不想手动更正错误,记住
表要包含一个id字段,而且是整数类型,自增长同时是主键
其他字段最好不要含有id(id,flightid)
步骤1:先手动创建数据库和表
步骤2:然后用EF创建模型(ObjectContext)
1》选中Model文件夹,添加:数据(ADO实体数据模型)
下一步下一步,...确定
2》重要:编译!!!!
3》添加控制器(写方法,添加视图,设计视图)
自动生成
步骤3:本地化和完善(小问题解决)
练习:使用数据库优先的方法,完成通讯录管理系统
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
4>使用代码优先(“code-first”) 的开发模式做项目
步骤1:先手动创建模型,
1.1 (注意:)配置连接串(可以不配置:
默认数据库服务器是:.\sqlexpress)
如果默认数据库服务器不能登录,必须配置!
就设置为.那个服务!,如下:
注意:providerName这个是必须要写的
<connectionStrings>
<add name="MyDb"
connectionString="server=.;database=MyDb;integrated security=true;"
providerName="System.Data.SqlClient" />
</connectionStrings>
1.2 定义实体类(模型类),添加元数据
注意:要包含一个int类型的id;
1.3 定义数据上下文
(注意:如果使用默认的数据库服务器,就不用写构造函数;
否则需要些构造函数,访问那个MyDb)
要引入命名空间System.Data.Entiy
两个数据类型 DbContext;DbSet<>
1.4 编译!!!!
步骤2:然后用EF(根据模型)创建数据库
问题:数据库名称太长(默认配置)
希望数据库名称合适一些,最好配置连接串!
模型里边的修改完,一般控制器视图都要重做(或者取修改)
注意:模型里边修改,一般控制器视图都要重做(或者取修改),
甚至数据库都要删除重建
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
练习2:开发学生管理系统,使用代码优先的开发模式
步骤和注意事项如上!!!
—————————————————————————
问题:万一系统使用了一段时间,已经放入了很重要数据,
模型变了。数据库就不能简单的删除了
(把原来的数据备份,把数据保留
重建数据库
把原来的数据导入到新的数据库中)数据迁移
数据迁移如何完成
以前:手动完成
现在EF的高版本,也提供了自动管理原有数据的功能(但是
可靠性稳定性 不是很好)
质疑:代码先行的方法到底有没有价值和意义
1》实际项目中 如果用EF,一般使用数据先行的方法
不用代码先行的方法
2》为什么微软要提供代码先行的方法??
不是为了让你去使用它做一个新项目
而是利用这种方式去研究一个已有的项目!!1
—————————————————————————
代码先行方法:
1)如果有多个表,那就写多个模型
表之间有主从关系,可以在两个模型类添加导航属性
(注意 分清,哪个是主表,哪个是从表)
导航数据在表中不出现,用于生成外键!!
2)添加控制器
先添加主表的控制器(数据库会生成 主表和从表)
先添加主表的控制器同时也生成了主表对应的视图(页面)
再添加从表的控制器,从而生成从表对应的视图(页面)
选一个页面做主页面,把其他控制器连接起来!
——————————————————————————