- 浏览: 1068490 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (639)
- 服务器配置篇 (58)
- hibernate篇 (14)
- spring篇 (33)
- struts篇 (28)
- JS篇 (46)
- 其他技术篇 (46)
- 数据库集群配置 (6)
- JAVA基础相关 (48)
- 分布式框架HadHoop的应用 (2)
- FLEX篇 (8)
- SQLSERVER技术 (32)
- Android学习 (13)
- amchart学习笔记 (1)
- openfire+smark搭建即时通讯 (9)
- Linux学习 (18)
- Oracle数据库 (15)
- 网站优化技术 (12)
- mysql数据库 (2)
- 项目学习总结 (18)
- 工具类(JAVA) (12)
- 工具类(JS) (2)
- 设计模式 (10)
- Lucene学习 (24)
- EJB3学习 (6)
- Sphinx搜索引擎 (3)
- 工作中用到的软件小工具 (5)
- .NET (49)
- JAVA 连接SQLSERVER2008步骤 (1)
- MongoDB (19)
- Android手机开发 (3)
- Maven (6)
- vue (9)
- Shiro (4)
- mybatis (3)
- netty框架 (1)
- SpringCloud (3)
- spring-cloud (7)
- Git (1)
- dubbo (2)
- springboot (13)
- rocketmq (1)
- git学习 (2)
- kafka服务器 (2)
- linux (10)
- WEB系统辅助项目 (1)
- jenkins (2)
- docker (4)
- influxdb (3)
- python (2)
- nginx (1)
最新评论
-
jiangfuofu555:
这样数据量大,效率怎么样?
sqlserver 实现分页的前台代码 以及后台的sqlserver语句 -
w156445045:
博主请问下,如何做到实时的刷新呢,
另外我后台是Java 谢谢 ...
web 版本的汽车仪表盘,非常好看。还有各种图形 -
jackyin5918:
<transportConnector name=&qu ...
ActiveMQ的activemq.xml详细配置讲解 -
握着橄榄枝的人:
你这个不是spring1.x的吧
spring1.x使用AOP实例 -
xiaophai:
全乱套了!
openfire+spark搭建完美的及时通讯
在ASP.NET MVC3中使用EFCodeFirst 1.0
1. 新建项目
打开VS2010,选择 文件>新建>项目,新建ASP.NET MVC3 Web 应用程序,我这里把它命名为Blog。
2. 编写实体类
对于一个博客,一下几个类应该是必须的吧:
- Post 博客文章类
- Comment 文章评论类,和Post是一对多的关系
- Category 目录类,和Post是一对多的关系
- Tag 标签类,和Post是多对多的关系
- FriendLink 友情链接类
先不考虑管理员之类的东西。 在Model中依次添加上面的类。
01 |
namespace Blog.Models
|
02 |
{ |
03 |
public class Post
|
04 |
{
|
05 |
public int ID { get ; set ; }
|
06 |
public int CategoryID { get ; set ; }
|
07 |
|
08 |
public string Title { get ; set ; }
|
09 |
public string Summary { get ; set ; }
|
10 |
public string Alias { get ; set ; }
|
11 |
public string Content { get ; set ; }
|
12 |
public DateTime CreateTime { get ; set ; }
|
13 |
|
14 |
public Category Category { get ; set ; }
|
15 |
public ICollection<Tag> Tags { get ; set ; }
|
16 |
public ICollection<Comment> Coments { get ; set ; }
|
17 |
}
|
18 |
} |
01 |
namespace Blog.Models
|
02 |
{ |
03 |
public class Comment
|
04 |
{
|
05 |
public int ID { get ; set ; }
|
06 |
public int PostID { get ; set ; }
|
07 |
public int Level { get ; set ; }
|
08 |
public int ReplyTo { get ; set ; }
|
09 |
|
10 |
public string UserName { get ; set ; }
|
11 |
public string Email { get ; set ; }
|
12 |
public string Website { get ; set ; }
|
13 |
public string Content { get ; set ; }
|
14 |
public DateTime CreateTime { get ; set ; }
|
15 |
|
16 |
}
|
17 |
} |
01 |
namespace Blog.Models
|
02 |
{ |
03 |
public class Category
|
04 |
{
|
05 |
public int ID { get ; set ; }
|
06 |
|
07 |
public string Name { get ; set ; }
|
08 |
public string Alias { get ; set ; }
|
09 |
public string Description { get ; set ; }
|
10 |
public DateTime CreateTime { get ; set ; }
|
11 |
|
12 |
public ICollection<Post> Posts { get ; set ; }
|
13 |
}
|
14 |
} |
01 |
namespace Blog.Models
|
02 |
{ |
03 |
public class Tag
|
04 |
{
|
05 |
public int ID { get ; set ; }
|
06 |
|
07 |
public string Name { get ; set ; }
|
08 |
public string Alias { get ; set ; }
|
09 |
public DateTime CreateTime { get ; set ; }
|
10 |
|
11 |
public ICollection<Post> Posts { get ; set ; }
|
12 |
}
|
13 |
} |
01 |
namespace Blog.Models
|
02 |
{ |
03 |
public class FriendLink
|
04 |
{
|
05 |
public int ID { get ; set ; }
|
06 |
|
07 |
public string Name { get ; set ; }
|
08 |
public string URL { get ; set ; }
|
09 |
public string Description { get ; set ; }
|
10 |
public DateTime CreateTime { get ; set ; }
|
11 |
}
|
12 |
} |
3. 添加EFCodeFirst
选择菜单栏的 工具 > Library Package Magager > Package Manager Console
在Package Manager Console中输入以下命令安装EFCodeFirst
1 |
PM> install -package efcodefirst
|
安装成功后,VS会自动在你的项目中添加对EntityFramework的引用。
4. 配置
EFCodeFirst的配置是相当的简单,我们向Model中添加BlogDB类。
01 |
using System.Data.Entity;
|
02 |
|
03 |
namespace Blog.Models
|
04 |
{ |
05 |
public class BlogDB : DbContext
|
06 |
{
|
07 |
public DbSet<Post> Posts { get ; set ; }
|
08 |
public DbSet<Tag> Tags { get ; set ; }
|
09 |
public DbSet<Category> Categories { get ; set ; }
|
10 |
public DbSet<Comment> Comments { get ; set ; }
|
11 |
public DbSet<FriendLink> FriendLinks { get ; set ; }
|
12 |
}
|
13 |
} |
打开web.config文件,添加链接字符串
01 |
< connectionStrings >
|
02 |
< add name = "BlogDB"
|
03 |
connectionString="Server=.\;
|
04 |
Database = Blog ; Trusted_Connection = true "
|
05 |
providerName = "System.Data.SqlClient" />
|
06 |
<!--<add name="BlogDB"
|
07 |
connectionString="Server=.\EXPRESS;
|
08 |
Database=Blog;Trusted_Connection=true"
|
09 |
providerName="System.Data.SqlClient" />-->
|
10 |
</ connectionStrings >
|
注意,name属性的值为“BlogDB”这里和BlogDB这个类的类名保持一致。数据库名称为Blog(这个数据库现在并不存在)。
5. 小试牛刀
新建一个HomeController,添加如下代码。
01 |
using Blog.Models;
|
02 |
|
03 |
namespace Blog.Controllers
|
04 |
{ |
05 |
public class HomeController : Controller
|
06 |
{
|
07 |
BlogDB _db = new BlogDB();
|
08 |
//
|
09 |
// GET: /Home/
|
10 |
|
11 |
public ActionResult Index()
|
12 |
{
|
13 |
var posts = _db.Posts;
|
14 |
return View(posts);
|
15 |
}
|
16 |
|
17 |
}
|
18 |
} |
给Index Action创建一个View,如下图示:
添加完后就迫不及待的果断的奋力的按下F5吧,让我们看看都发生了什么!
网页显示了如下信息,不过这不是今天的重点,今天的重点是数据库。让我们打开数据库看看,里面发生了什么。
看吧,EF自动的为我们创建了数据库。
而且,EF足够聪明的为我们完成了Posts到Tags的多对多联系!!!我们程序中并没有和TagPosts表对应的Model,有的只是如下的两行代码
在Post类中
1 |
public ICollection<Tag> Tags { get ; set ; }
|
在Tag类中
1 |
public ICollection<Post> Posts { get ; set ; }
|
我们可以简单的使用如下的代码来获得标签“CSharp”中的所有文章。
1 |
var posts = _db.Tags |
2 |
.Where(t => t.Name == "CSharp" )
|
3 |
.Single()
|
4 |
.Posts;
|
6. 修改Model后,自动更新数据表
当我们修改了Model后,运行网站时,会报错,因为EF现在不能把更新后的Model和旧数据表对应起来。为了使数据库随着Model的更新而更新,我们还要做以下的工作。
打开根目录下的Global.asax文件
添加如下命名空间(注意:EFCodeFirst 1.0 和 0.8 对于 DataBase 类所在的命名空间不同)
1 |
using System.Data.Entity;
|
2 |
using Blog.Models;
|
新建一个BlogDBInitializer类,使他继承DropCreateDatabaseIfModelChanges<BlogDB>,重写Seed函数。
01 |
public class BlogDBInitializer
|
02 |
: DropCreateDatabaseIfModelChanges<BlogDB>
|
03 |
{ |
04 |
protected override void Seed(BlogDB context)
|
05 |
{
|
06 |
base .Seed(context);
|
07 |
|
08 |
var links = new List<FriendLink>
|
09 |
{
|
10 |
new FriendLink{
|
11 |
Name= "NinoFocus.com" ,
|
12 |
URL= @"http://ninofocus.com" ,
|
13 |
Description= "NinoFocus的个人博客"
|
14 |
},
|
15 |
new FriendLink{
|
16 |
Name= "NinoFocus at CNBlogs" ,
|
17 |
URL= @"http://www.cnblogs.com/nizhuguo" ,
|
18 |
Description= "NinoFocus在博客园的博客"
|
19 |
}
|
20 |
};
|
21 |
links.ForEach(l => context.FriendLinks.Add(l));
|
22 |
context.SaveChanges();
|
23 |
}
|
24 |
} |
向Application_Start()中,添加如下代码
每次重建数据库后,数据库中的数据都是被清空。而Seed()函数的作用就是向新的数据库中添加以下初始化数据。
如上面的代码我添加了两个友情链接。
发表评论
-
C# WinForm程序如何与js交互
2012-07-15 22:28 2318一、建立网页 <html ... -
SQLITE FOR .NET4.0使用说明以及DLL
2012-06-28 22:07 1203SQLITE FOR .NET4.0使用说明以及DLL -
WinForm中TabControl的一些事件写法(C#)
2012-06-27 20:41 9878在TabControl控件中并没提供单个选项卡的Click事件 ... -
C# 通过字符串动态创建一个窗体
2012-06-27 20:27 1745private void button1_Click(obje ... -
vs2010 打包winform成EXE文件
2012-04-20 14:03 1648见附件 -
C#中DataGridView控件60招
2012-01-13 09:36 65571. DataGridView当前的单元格属性取得、变更 2 ... -
单击dataGridView某一行时将dataGridView当前选择行的某列值赋值给某个文本框
2012-01-13 09:19 2460SelectedRows和CurrentRow之间的区别 ... -
c# winform开发-datagridview开发
2012-01-13 09:18 1728datagridview 操作详解 目录: 1、 取得或 ... -
C# 中奇妙的函数. String Split 和 Join
2011-10-25 10:51 1111很多时候处理字符串数据,比如从文件中读取或者存入 - 我们可能 ... -
asp.net中web.config配置节点大全详解
2011-10-25 10:16 1374asp.net中web.config配置节点大全详解 2 ... -
Entity Framework in ASP.NET MVC Application (三)
2011-05-10 20:31 2468In the previous tutorial you im ... -
Entity Framework in ASP.NET MVC Application (二)
2011-05-10 20:29 1699In the previous tutorial you cr ... -
Entity Frame Work 4.1调用存储过程
2011-05-10 20:24 2134在这个问题上,琢磨了很久了。今天终于找到了调用的方法。 存储 ... -
entity-framework (code-first)实例开发(一)
2011-05-09 20:40 2752The Contoso University Web Appl ... -
使用ef4.1 的dbcontext进行数据库循环操作
2011-04-24 23:06 2265如果你想要调用一个类的方法进行循环操作:官方的例子: Dis ... -
使用EF 4.1的DbContext
2011-04-24 22:36 3642简述:EF4.1包括Code First和DbContext ... -
ADO.NET 访问存储过程
2011-04-24 22:15 1591ADO.NET 访问存储过程其实也比较简单,但是有些小细节部分 ... -
JAVA与.NET的相互调用——通过Web服务实现相互调用(附原代码)
2011-04-24 20:58 1287JAVA与.NET是现今世界竞争激烈的两大开发媒体,两者语言有 ... -
视图模式/视图->视图包
2011-04-24 20:16 1472ASP.NET MVC(自V1起)就支持一个带控制器和视图的V ... -
SkipRequestValidation] –> [AllowHtml]
2011-04-24 20:15 1437ASP.NET MVC内置了防止HTML和跨站脚本注入攻击的支 ...
相关推荐
本教程以Visual Studio 2010为开发环境,通过以下几个步骤详细介绍如何使用Scaffold工具在ASP.NET MVC项目中快速生成代码。 1. **新建ASP.NET MVC 3 Web应用程序** - 打开Visual Studio 2010。 - 选择“文件” >...
在这一节中,介绍ASP.NET MVC3框架的基本概念,以及在这个框架下开发书店应用的背景和目标。ASP.NET MVC3是一个用于构建动态网站的开源框架,它结合了Model(模型)、View(视图)和Controller(控制器)三个主要...
【标签】:“MVC3”是Microsoft开发的ASP.NET MVC框架的第三个主要版本,它提供了对ASP.NET Web Pages和Web Forms的增强支持,引入了新的特性如razor视图引擎,增强了对HTML5和CSS3的支持,以及改进的测试驱动开发...
6. **查询(LINQ to Entities)**:EFCodeFirst支持使用LINQ进行查询,可以直接在C#代码中写出SQL语句的逻辑,提高了代码的可读性和可维护性。 7. **性能优化**:包括减少数据库往返次数、避免查询时加载不必要的...
在使用 .NET 开发框架时,Entity Framework (EF) 是一个常见的对象关系映射库,它简化了数据库操作。在本文中,我们将讨论如何解决在安装 EFCodeFirst 包时遇到的问题,这个问题主要涉及到 PowerShell 脚本和 ...
Entity Framework (EF) 是微软提供的一款强大的对象关系映射(ORM)框架,它极大地简化了.NET应用程序中的数据访问层的开发。在EF中,有三种主要的开发模式:Code First、Model First 和 Database First。本篇文章将...
在.NET 4.0环境中,SQLite CodeFirst多文件的实现意味着你可以在一个项目中定义多个数据库模型类,每个类对应一个单独的SQLite数据库文件。这在处理不同数据集或模块化项目时非常有用,因为它允许你将数据逻辑隔离,...
在安装EFCodeFirst时出错可以安装此补丁,适用于Windows Server2003中文简体
3. **支持现有数据库**:即使是在已有数据库的项目中,Code First 也可以很好地工作,提供了一种将现有数据库与新开发的代码进行结合的方式。 4. **易于上手**:对于新手来说,Code First 的入门门槛相对较低,因为...
dotnet ef迁移添加EFCodeFirst这将基于WebApp中使用的模型(即连接字符串中使用的数据库名称)创建迁移脚本。 使用此方法的好处是,即使Sql Server中不存在新数据库,它也会默认创建一个新数据库。 5)。 dotnet ef...
安装EFCodeFirst之前必先安装的服务
本实例包含EFCodeFirst分别SQLServer和MySQL数据的使用。Code First模式我们称之为“代码优先”模式,是从EF4.1开始新建加入的功能。使用Code First模式进行EF开发时开发人员只需要编写对应的数据类(其实就是领域...