ASP.NET MVC+Entity Framework 4.1访问数据库
Entity Framework 4.1支持代码优先(code first)编程模式:即可以先创建模型类,然后通过配置在EF4.1下动态生成数据库。
下面演示两种情形:
1、代码优先模式下,asp.net mvc数据访问
2、传统模式,先创建数据库和表,配置连接字符串,再生成模型
第一种情况的步骤:
(1)使用空模板,创建ASP.NET MVC3.0(或4.0)项目,假定项目名:MVC_Student
注意:创建完项目后,项目会自动引用EF4.1
(2)在Model文件夹下,创建数据库上下文类:StuDBContext
public class StuDBContext:DbContext
{
public StuDBContext()
: base("DataConn")
{
}
public DbSet<StudentInfo> Students { get; set; }
}
(3)创建域模型:StudentInfo
public class StudentInfo
{
public int ID { get; set; }
public string StuNO { get; set; }
public string StuName { get; set; }
public string StuPhoto { get; set; }
public DateTime StuBirthday { get; set; }
public string StuAddress { get; set; }
}
(4)在web.config中配置连接字符串(也可以不配置,EF自动检查并使用SQL SERVER EXPRESS,此处我们指定服务器和数据库)
<connectionStrings>
<!--<add name="StuDBContext" connectionString="server=(local);database=MyStudent;uid=(登录账户);pwd=(登录密码)" providerName="System.Data.SqlClient"/>-->
<add name="DataConn" connectionString="server=(local);database=MyStudent;uid=(登录账户);pwd=(登录密码)" providerName="System.Data.SqlClient"/>
</connectionStrings>
(5)生成项目,为第(6)步服务
(6)右击“Controllers"文件夹,选择”添加控制器“,如图:

单击确定后,会在Controllers文件夹下生成一个StudentController类,而且在Views文件夹下生成Student子文件夹,其中包含5个.cshtml文件,如图:

(7)修改Global.asax.cs的默认路由:
routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
new { controller = "Student", action = "Index", id = UrlParameter.Optional } // 参数默认值
);
(8)最后,单击”调试“菜单,选择”启动调试“,或直接按F5.会看到如下效果:

(9)可以单击”Create New"超链接,向数据库添加一条记录
(10)此时可以打开数据库服务器,会发现自动创建了MyStudent的数据库(对应连接字符串中的数据库)和StudentInfoes表(是模型类名称的复数形式,表中的各字段分别对应模型类中的属性,此处要特别注意:ID属性会自动对应表中的自增长主键列。
以上方法需要注意的地方:
(1)web.config中连接字符串,providerName要提供,否则报错。
(2)模型的ID属性是固定的, 要不就要用元数据声明,EF4.1会自动将之映射为表的主键(自增长)。
(3)数据库实体上下文名称一般与连接字符串name属性的值相同,但本文中不同(数据库实体上下文是StuDBContext,连接字符串名称:DataConn),如果相同,那么实体上下文类可以不提供构造函数。如果不相同,如本例中,可以为实体上下文添加构造函数,并调用父类构造函数,在base()中传递与实体上下文类名不同的连接字符串名称(本例中时DataConn,如步骤(2)红色标注)
________________________________________________________________________________________________________________________________________
下面演示第2种情形:先创建数据库模式,然后生成模型
(1)在SQL SERVER 2005/2008服务器上创建数据库MyStudent,并添加一张表StudentInfoes(也可以在VS中服务器资源管理器中操作)
表的结构如下;

(2)创建ASP.NET MVC3/4项目(使用空模板)
(3)在Models文件夹中添加实体上下文类:StuDBContext
public class StuDBContext:DbContext
{
public StuDBContext()
: base("DataConn")
{
}
public DbSet<StudentInfo> Students { get; set; }
}
(4)在Models文件夹中添加实体类:StudentInfo
public class StudentInfo
{
public int ID { get; set; }
public string StuNO { get; set; }
public string StuName { get; set; }
public string StuPhoto { get; set; }
public DateTime StuBirthday { get; set; }
public string StuAddress { get; set; }
}
(5)在web.config中配置连接字符串:
<connectionStrings>
<!--<add name="StuDBContext" connectionString="server=(local);database=MyStudent;uid=(登录账户);pwd=(登录密码)" providerName="System.Data.SqlClient"/>-->
<add name="DataConn" connectionString="server=(local);database=MyStudent;uid=(登录账户);pwd=(登录密码)" providerName="System.Data.SqlClient"/>
</connectionStrings>
(6)生成项目解决方案,为第(7)步服务
(7)在Controllers文件夹下添加StudentController类,如图:

单击添加后,会创建与第一种情形同样的项目文件结构。如上面所示。
(8)修改路由:
routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
new { controller = "Student", action = "Index", id = UrlParameter.Optional } // 参数默认值
);
(9)启动调试,预览效果如下:

对比两种方式,有如下区别:自动生成数据库表的字段类型可能与自定义的不一致。
无论是通过代码生成数据库,还是先创建数据库,再创建模型,都需要了解他们之间的映射关系(即EF作为ORM框架的作用),你会发现EF4.1作为ORM框架,遵循很多约定(Convention),而ASP.NET MVC推崇的很重要的一条原则就是:约定先于配置,可谓不谋而合。
转载自:http://blog.csdn.net/sdtsfhh/article/details/8141242
ASP.NET MVC+Entity Framework 4.1访问数据库的更多相关文章
- ASP.NET MVC - Entity Framework
ASP.NET MVC - Entity Framework 实体关系 关系是某个实体(表)的一条记录对应于另一个实体(表)的一条或多条记录. 一对多关系 单方面的包含关系称为一对多,而一对多和一对一 ...
- 使用ASP.NET MVC+Entity Framework快速搭建系统
详细资料: http://www.cnblogs.com/dingfangbo/p/5771741.html 学习 ASP.NET MVC 也有一段时间了,打算弄个小程序练练手,做为学习过程中的记录和 ...
- ASP.NET MVC+Entity Framework 访问数据库
Entity Framework 4.1支持代码优先(code first)编程模式:即可以先创建模型类,然后通过配置在EF4.1下动态生成数据库. 下面演示两种情形: 1.代码优先模式下,asp.n ...
- ASP.NET Core 入门教程 8、ASP.NET Core + Entity Framework Core 数据访问入门
一.前言 1.本教程主要内容 ASP.NET Core MVC 集成 EF Core 介绍&操作步骤 ASP.NET Core MVC 使用 EF Core + Linq to Entity ...
- ASP.NET Core 入门笔记9,ASP.NET Core + Entity Framework Core 数据访问入门
一.前言 1.本教程主要内容 ASP.NET Core MVC 集成 EF Core 介绍&操作步骤 ASP.NET Core MVC 使用 EF Core + Linq to Entity ...
- Asp.net Mvc Entity Framework Code First 数据库迁移
1.创建Mvc项目 2.安装Entity Framework 2.1.如下图打开程序包管理器控制台: 2.2.输入命令Install-Package EntityFramework,即可安装Entit ...
- 使用ASP.NET MVC+Entity Framework快速搭建博客系统
学习 ASP.NET MVC 也有一段时间了,打算弄个小程序练练手,做为学习过程中的记录和分享. 首先,得确定需求,木有需求的话,那还搞个毛线呀!嗯……大致思考了一下,终于得出如下需求: 1.能自定义 ...
- ASP.NET MVC+Entity Framework code first 迁移
再来一张,选择 MVC 模版,其他的没选过,不会用 =_=!! 身份验证用个人用户账户,这个是为了偷懒,话说 ASP.NET Identity 还是很给力的,不用白不用 ^_^~ 点击确定之后,会看 ...
- ABP 教程文档 1-1 手把手引进门之 ASP.NET Core & Entity Framework Core(官方教程翻译版 版本3.2.5)
本文是ABP官方文档翻译版,翻译基于 3.2.5 版本 官方文档分四部分 一. 教程文档 二.ABP 框架 三.zero 模块 四.其他(中文翻译资源) 本篇是第一部分的第一篇. 第一部分分三篇 1- ...
随机推荐
- Linux系统下安装phpmyadmin方法
phpmyadmin下载地址:不要分,赶紧去下载吧!http://download.csdn.net/detail/u011986449/7429799 1.找到 /libraries/config. ...
- CSS 根据数据显示样式
在低版本IE时代,我们想让数据根据其值显示不同的样式可能需要直接从服务器端输出时为不同的数据添加相应的class.但现在,通过属性选择器+伪元素+属性选择符,这三个东西混合使用就可以让数据根据其值以不 ...
- sql日志损坏造成数据库置疑解决办法
--如果确定是日志损坏造成,请用下面的方法恢复日志文件.--第一步--use mastergo sp_configure 'allow updates', 1reconfigure with over ...
- iOS退出键盘的两种方式
1,可以让叫出键盘的那个控件,退出第一响应者; 例如:textField叫出的键盘,那么就可以调用textField.resignFirstResponder,达到谁叫出的键盘谁退回去 2,可以让叫出 ...
- hdu3516
题目大意:这个....翻译起来还真是不好说,各位四六没过的ACMer正好去原网页看看题意,过了的好孩子还是去看看原网页看看锻炼一下吧.(当然我做这道题目的时候,教练已经摆明说要用四边形不等式,所以还是 ...
- java中JSON串转换并获取数据
String strAllImp= " [{"id":2,"name":"还不错","count":3}]&q ...
- [Python]豆瓣用户读书短评下载工具
简介 朋友问我能不能做一个下载他在豆瓣读书上的短评的工具,于是就做了这个“豆瓣用户读书短评下载工具”. GitHub链接:https://github.com/xiaff/dbc-downloader ...
- vim note
2016-1-22 vim plugin collections: (参考 https://www.youtube.com/watch?v=0QFR-_wUoA0) vim-pathogen 插件管 ...
- Android 保存图片到SQLite,读出SQLite中的图片
1.bitmap保存到SQLite 中 数据格式: db.execSQL("Create table express ( _id INTEGER PRIMARY KEY AUTOINCREM ...
- java文件读写操作
Java IO系统里读写文件使用Reader和Writer两个抽象类,Reader中read()和close()方法都是抽象方法.Writer中 write(),flush()和close()方法为抽 ...