ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,现已经包含在 Visual Studio 2008 Service Pack 1 以及 .NET Framework 3.5 Service Pack 1 中发布。目前最新版本为4.1,可以点此下载

  ADO.NET Entity Framework 以 Entity Data Model (EDM) 为主,将数据逻辑层切分为三块,分别为 Conceptual Schema, Mapping Schema 与 Storage Schema 三层,其上还有 Entity Client,Object Context 以及 LINQ 可以使用。在最新4.1版本中,增加了 DbContext API及Codefirst,DbContext API是基于ObjectContext和其他一些类型抽象出的一个简单的API,并进行了优化。
Code First是基于Entity Framework的新的开发模式,原先只有Database First和Model First两种。Code First先用C#/VB.NET的类定义模型,然后映射到现有的数据库或者产生新的数据库结构。Code First同样支持通过Data Annotations或fluent API进行定制化配置。过多的内容就不多说了,框架图下:

  简单介绍就到这里,先来构建一个简单的例子,来感受一下这个框架。这个例子采用简单的Database-First方法.

  首先在建一个示例数据库BlogDB,然后创建两张表如下图示:

  随便录入一些测试数据。

  第二步:打开VS2010,新建控制台应用程序EFSample

  第三步:右键工程目录,在弹出菜单点击添加新项,添加ADO.Net Entity Data Model,并命名为:Blog.edmx,如下图示:

  

  在弹出的新窗口,选择Generate from database,下一步

  

  选择数据连接,并将数据库连接字符串保存在程序中,继续下一步

  

  选择要添加的表,完成,这时就添加好了这个Blog.edmx,这个文件是从数据库自动生成的模型文件,基于xml格式,包含概念模型、存储模型以及这两个模型之间的映射。如下图示:

  

  这是最后生成的EDM。

  

  最后,打开Program.cs 键入代码,如下示。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace EFSample
{
class Program
{
static void Main(string[] args)
{
IList<BlogUser> blogUsers = TestEF.GetAllBlogUsers(); ///遍历所有查询结果
foreach (var blogUser in blogUsers)
{
Console.WriteLine(blogUser); ///获取外键对象的内容
foreach (var post in blogUser.Posts)
{
Console.WriteLine("\t 随笔标题:{0}",post.PostTitle);
}
}
}
} public static class TestEF
{
public static IList<BlogUser> GetAllBlogUsers()
{
///BlogDBEntities是继承于ObjectContext类,自动生成
///可以打开Blog.Desgner.cs文件找到
///原型: public partial class BlogDBEntities : ObjectContext
///可以理解为 他代表了当前数据库环境对象
///同时,在Blog.Desgner.cs里还可以找到两个实体BlogUser及Post
BlogDBEntities blogDB = new BlogDBEntities();
///采用Linq语法读取数据
IList<BlogUser> blogUsers = blogDB.BlogUsers.ToList<BlogUser>();
return blogUsers;
}
} public partial class BlogUser
{
public override string ToString()
{
return string.Format("编号:{0} 姓名:{1}", this.BlogID, this.BlogName);
}
}
}

  下面可以运行,测试,效果如图:

EF框架—Database-First的更多相关文章

  1. EF框架CodeFirst the model backing the 'PModelEntities' context has changed since the database was created. Consider using Code First Migrations to update the database

    1.采用code first 做项目时,数据库已经生成,后期修改数据库表结构.再次运行时出现一下问题: Entity Framework : The model backing the 'Produc ...

  2. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(24)-权限组的设计和实现(附源码)(终结)

    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    ...

  3. EF框架的三种工作方式

    EF框架step by step(1)—Database-First EF框架step by step(2)—Model-First EF框架step by step(3)—Code-First 通过 ...

  4. C# CodeFirst(EF框架)代码优先创建数据库

    namespace WebEF.Model{ public class ModelContext:DbContext //继承DBcontext 来自EF框架 { public ModelContex ...

  5. EF框架学习手记

    转载: [ASP.NET MVC]: - EF框架学习手记 1.EF(Entity Framework)实体框架EF是ADO.NET中的一组支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架 ...

  6. EF框架之三种模式

    使用EF之前必须要对EF有个宏观的了解.学习任何一种技术都要像门卫一样问几个问题. 第一,它是谁? 第二,从哪里来? 第三,到哪里去? 默念一遍:不谋全局者,不足谋一域. Entity Framewo ...

  7. EF框架step by step(7)—Code First DataAnnotations(1)

    Data annotation特性是在.NET 3.5中引进的,给ASP.NET web应用中的类提供了一种添加验证的方式.Code First允许你使用代码来建立实体框架模型,同时允许用Data a ...

  8. EF框架step by step(5)—处理实体简单属性

    EF框架会对实体进行跟踪,对实体的每个属性当前值和原始值及其状态进行跟踪,记录.当前值是指实体属性当前的被赋予的值,而原始值是指实体最初从数据库读取或者附加到DbContext时的值. 先通过简单的代 ...

  9. EF框架step by step(2)—Model-First

    这一篇主要说一下EF框架中,Model First做法,仍然采用上一篇的案例.但增加评论功能.首先打开Blog.edmx文件,在空白处右键,添加新实体Comment,如下图示: 点击确定,关闭窗口. ...

  10. [ASP.NET MVC]: - EF框架学习手记

    1.EF(Entity Framework)实体框架EF是ADO.NET中的一组支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架. 2.什么是ORM?ORM指的是面向对象的对象模型和关系型 ...

随机推荐

  1. lua-C++ userdata使用

    lua-C++ userdata使用 所负责的产品使用非常灵活,可设置的参数上千个,而且还支持用户用lua进行流程控制,所以开发中要用到很多lua.C++混合编程.之前对这些也还是一知半解,只会依葫芦 ...

  2. lua中调用C++函数

    lua中调用C++函数 我们产品中提供了很多lua-C API给用户在lua中调用,之前一直没用深究其实现原理,只是根据已有的代码在编码.显然这不是一个好的习惯,没用达到知其所以然的目的. 一.基本原 ...

  3. 优动漫PAINT-朱槿花的画法

    火红夺目的朱槿花,绝对是烘托画面的绝佳布景!画法发非常简单,毫无绘画基础的人也能够将它很好的呈现出来哟~ 教程是简单,呃.... 没有优动漫PAINT软件肿么办? 别着急,╭(╯^╰)╮ 小编给你送来 ...

  4. 虚拟机创建后该如何获取IP地址并访问互联网实用教程

    之前在做项目的时候主机IP地址.网关.DNS.子网掩码等都是公司或者对方直接给提供的,但是如果我们自己想搭建一台虚拟机或者一台集群的话,手头又没有IP地址,该肿么办呢?   白慌,这里介绍一个小技巧, ...

  5. 在 android studio 中更新安卓应用版本号

    随着应用程序不断修改,版本号也应当变化.要更新安卓应用的版本号,只需要在 build.gradle(module:app) 中修改 versionCode 和 versionName 即可,也可以只改 ...

  6. NOIp模拟赛三十一

    持续降智 分数:100+0+0=100 C题subtask是假的,根本没有部分分中的情况...还我20分QAQ A:[BZOJ4444]国旗计划 B:[agc006f]blackout C:[arc0 ...

  7. shell 文件中添加内容

    下文所有 1111  ,  2222 均为字符串 sed -i '/1111/i\2222' a.txt   在a.txt中找到所有符合1111得 前面加上2222 sed -i '/1111/a\2 ...

  8. SCIP,Clp,Gurobi和Cplex安装

    SCIP安装 1.在自己的家目录下建立目录scip,并将获得的压缩包考入该文件夹并解压缩 tar -zxvf scipoptsuite-5.0.0.tgz 2.进入目录scipoptsuite-5.0 ...

  9. CSS 子元素选择器

    所有选择器参考手册:http://www.w3school.com.cn/cssref/css_selectors.asp 1)子元素选择器 参考链接:http://www.w3school.com. ...

  10. 紫书 习题 11-1 UVa 821 (Floyd)

    水题, Floyd一遍就完了. #include<cstdio> #include<algorithm> #define REP(i, a, b) for(int i = (a ...