`
baobeituping
  • 浏览: 1065138 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

在ASP.NET MVC3中使用EFCodeFirst 1.0

    博客分类:
  • .NET
阅读更多

在ASP.NET MVC3中使用EFCodeFirst 1.0

1. 新建项目

打开VS2010,选择 文件>新建>项目,新建ASP.NET MVC3 Web 应用程序,我这里把它命名为Blog。

image

2. 编写实体类

对于一个博客,一下几个类应该是必须的吧:

  • Post                             博客文章类
  • Comment                     文章评论类,和Post是一对多的关系
  • Category                     目录类,和Post是一对多的关系
  • Tag                             标签类,和Post是多对多的关系
  • FriendLink                  友情链接类

先不考虑管理员之类的东西。 在Model中依次添加上面的类。

image

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

image

在Package Manager Console中输入以下命令安装EFCodeFirst

1 PM> install-package efcodefirst
image

安装成功后,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,如下图示:

image

添加完后就迫不及待的果断的奋力的按下F5吧,让我们看看都发生了什么!

image

网页显示了如下信息,不过这不是今天的重点,今天的重点是数据库。让我们打开数据库看看,里面发生了什么。

image

看吧,EF自动的为我们创建了数据库。

image

而且,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()中,添加如下代码

image

每次重建数据库后,数据库中的数据都是被清空。而Seed()函数的作用就是向新的数据库中添加以下初始化数据。

如上面的代码我添加了两个友情链接。

分享到:
评论

相关推荐

    Scaffold asp.net mvc中文教程

    本教程以Visual Studio 2010为开发环境,通过以下几个步骤详细介绍如何使用Scaffold工具在ASP.NET MVC项目中快速生成代码。 1. **新建ASP.NET MVC 3 Web应用程序** - 打开Visual Studio 2010。 - 选择“文件” &gt;...

    mvc书店实例

    在这一节中,介绍ASP.NET MVC3框架的基本概念,以及在这个框架下开发书店应用的背景和目标。ASP.NET MVC3是一个用于构建动态网站的开源框架,它结合了Model(模型)、View(视图)和Controller(控制器)三个主要...

    我的电影清单

    【标签】:“MVC3”是Microsoft开发的ASP.NET MVC框架的第三个主要版本,它提供了对ASP.NET Web Pages和Web Forms的增强支持,引入了新的特性如razor视图引擎,增强了对HTML5和CSS3的支持,以及改进的测试驱动开发...

    EFCodeFirst案例

    6. **查询(LINQ to Entities)**:EFCodeFirst支持使用LINQ进行查询,可以直接在C#代码中写出SQL语句的逻辑,提高了代码的可读性和可维护性。 7. **性能优化**:包括减少数据库往返次数、避免查询时加载不必要的...

    无法安装efcode的解决方案

    在使用 .NET 开发框架时,Entity Framework (EF) 是一个常见的对象关系映射库,它简化了数据库操作。在本文中,我们将讨论如何解决在安装 EFCodeFirst 包时遇到的问题,这个问题主要涉及到 PowerShell 脚本和 ...

    EF的其中一种开发方式Code First

    Entity Framework (EF) 是微软提供的一款强大的对象关系映射(ORM)框架,它极大地简化了.NET应用程序中的数据访问层的开发。在EF中,有三种主要的开发模式:Code First、Model First 和 Database First。本篇文章将...

    Sqlite codefirst 多文件

    在.NET 4.0环境中,SQLite CodeFirst多文件的实现意味着你可以在一个项目中定义多个数据库模型类,每个类对应一个单独的SQLite数据库文件。这在处理不同数据集或模块化项目时非常有用,因为它允许你将数据逻辑隔离,...

    NuGet所用补丁

    在安装EFCodeFirst时出错可以安装此补丁,适用于Windows Server2003中文简体

    Code First 教程

    3. **支持现有数据库**:即使是在已有数据库的项目中,Code First 也可以很好地工作,提供了一种将现有数据库与新开发的代码进行结合的方式。 4. **易于上手**:对于新手来说,Code First 的入门门槛相对较低,因为...

    EntityFrameworkCodeFirst

    dotnet ef迁移添加EFCodeFirst这将基于WebApp中使用的模型(即连接字符串中使用的数据库名称)创建迁移脚本。 使用此方法的好处是,即使Sql Server中不存在新数据库,它也会默认创建一个新数据库。 5)。 dotnet ef...

    powershell2.0 for xp

    安装EFCodeFirst之前必先安装的服务

    EF代码优先实例(包含SQLServer与MySQL)

    本实例包含EFCodeFirst分别SQLServer和MySQL数据的使用。Code First模式我们称之为“代码优先”模式,是从EF4.1开始新建加入的功能。使用Code First模式进行EF开发时开发人员只需要编写对应的数据类(其实就是领域...

Global site tag (gtag.js) - Google Analytics