转自:http://www.cnblogs.com/Tally/archive/2013/01/30/2882855.html

EF4.1有三种方式来进行数据操作及持久化。分别是Database-First,Model-First,Code-first,下面简单小结一下:
1.Database First是基于已存在的数据库,利用某些工具(如Vs提供的EF设计器)创建实体类,数据库对象与实体类的匹配关系等,你也可以手动修改这些自动生成的代码及匹配文件。
2.Model First 这种方式是先利用某些工具(如VS的EF设计器)设计出实体数据模型及他们之间的关系,然后再根据这些实体、关系去生成数据库对象及相关代码文件。
3.Code First 这种方式需要先写一些代码,如实体对象,数据关系等,然后根据已有的代码描述,自动创建数据对象,这种方式在前一篇文章已经简单说过了。但其实这种方法与Model First是非常类似的。我们自己写的代码,其实就是用代码表示实体模型,而Model First是用可视化的方式描述了实体模型。

code First方法默认情况下是以命名空间.DBcontext类名来作为自动创建的数据库名称,如上一篇中的CodeFirstSample.BlogDbContext.

我们也可以按如下方法指定数据库名称:


publicclass BlogDbContext : DbContext
{
///<summary>
/// 新建数据库,并命名为BlogDB,
///</summary>
public BlogDbContext() : base("BlogDB") { } public IDbSet<BlogUser> BlogUsers { get; set; }
public IDbSet<Post> Posts { get; set; } }

code First这种方式也可以用于已存在的数据库,具体作法如下:

第一步:在app.config或者web.config中配置数据库连接字符串


<configuration>
<connectionStrings>
<add name="BlogDB" providerName="System.Data.SqlClient" 
connectionString="Data Source=.\sqlexpress;Initial Catalog=MyBlogDB;Integrated Security=True"/>
</connectionStrings>
</configuration>

第二步:是让DBcontext获取已存在数据库,在构造DBcontext时,指定使用这个连接字符串


publicclass BlogDbContext : DbContext
{ ///<summary>
/// 会在app.config或者web.config文件中查找BlogDB节,做为连接字符串
/// 但数据库中必须已存在表,即不会重新创建表,这种方法类似DataBase First
///</summary>
public BlogDbContext()
: base("name=BlogDB")
{ }
public IDbSet<BlogUser> BlogUsers { get; set; }
public IDbSet<Post> Posts { get; set; } }

第三步:添加要匹配的类以及匹配关系。


publicpartialclass BlogUser
{ publicint BlogUserId { get; set; }
publicstring BlogName { get; set; } 
publicvirtual ICollection<Post> Posts { get; set; }
} publicpartialclass Post
{  publicint PostId { get; set; } 
publicstring PostTitle { get; set; }
publicint BlogUserId { get; set; } 
publicvirtual BlogUser BlogUser { get; set; } 
}

第四步:获取数据


using (BlogDbContext db =new BlogDbContext())
{ //通过主键查找用户
BlogUser blogUser = db.BlogUsers.Find(4);
Console.WriteLine(blogUser.BlogName);
foreach (var item in blogUser.Posts)
{
Console.WriteLine("\t{0}",item.PostTitle);
}
}

DBcontext应用于已存在数据库的更多相关文章

  1. EF框架step by step(4)—DBcontext应用于已存在数据库

    EF4.1有三种方式来进行数据操作及持久化.分别是Database-First,Model-First,Code-first,前面都已经简单介绍过了.下面简单小结一下:1.Database First ...

  2. EF对于已有数据库的Code First支持

    EF对于已有数据库的Code First支持 原文链接 本文将逐步介绍怎样用Code First的方式基于已有数据库进行开发.Code First支持你使用C#或者VB.Net定义类.并使用数据模型标 ...

  3. EntityFramework Core Code First 已有数据库

    问题场景:我已经有一个数据库,想用 EF core Code First,怎么办? 首先,可以参考微软的API文档:通过现有数据库在 ASP.NET Core 上开始使用 EF Core, 这一步可以 ...

  4. mysql workbench如何把已有的数据库导出ER模型

    mysql workbench的特长是创建表结构的,然后在结构图中,圈圈点点,很容易就利用可视化方式把数据库建好,然后再导入到数据库服务器中,这种办法很效率.但是有时我们有一个需求,事先没有建表结构模 ...

  5. sql 2012日志文件频繁出现:svchost (4892) 数据库引擎已分离数据库(1、C:\Windows\system32\LogFiles\Sum\Current.mdb)

    svchost (4892) 数据库引擎已分离数据库(1.C:\Windows\system32\LogFiles\Sum\Current.mdb).(时间=0 秒) 内部计时序列: [1] 0.00 ...

  6. ASP.NET MVC 如何解决“上下文的模型已在数据库创建后发生更改”问题

    问题描述:支持"XXContext"(泛指之类的数据库上下文模型)上下文的模型已在数据库创建后发生更改.请考虑使用 Code First 迁移更新数据库. 问题解决:坑爹的MVC会 ...

  7. 无法作为数据库主体执行,因为主体 "dbo" 不存在、无法模拟这种类型的主体,或您没有所需的权限。 已将数据库上下文更改为

    右键删除发布时报错信息: 其他信息:执行 Transact-SQL 语句或批处理时发生了异常. (Microsoft.SqlServer.ConnectionInfo)——————————无法作为数据 ...

  8. 支持“***Context”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。

    在用VS进行MVC开发的过程中遇到如下问题: 支持“***Context”上下文的模型已在数据库创建后发生更改.请考虑使用 Code First 迁移更新数据库(http://go.microsoft ...

  9. django连接已有的数据库

    以连接postgresql为例: 1.安装psycopg2,下载地址:http://www.stickpeople.com/projects/python/win-psycopg/ 2.配置setti ...

随机推荐

  1. iOS开发——视频播放 待更新……

    本文主要实现调用系统自带的播放器,自带的播放器已经做好了屏幕的适配,集成播放,暂停,快进等功能.能够满足基本的视频播放功能及iOS的视频播放的开发. 最后将其简单的封装成一个iOS视频播放工具类. 一 ...

  2. react native ios 开发,基础配置笔记。

    一.获取硬件信息,使用react-native-device-info插件,配置说明: 1.首先需要安装组件:npm install react-native-device-info --save 2 ...

  3. 互联网金融爬虫怎么写-第三课 雪球网股票爬虫(ajax分析)

    大家好啊,话说好久没有出来活动了,组织上安排写代码写了很久,终于又被放出来写教程了,感谢大家一直的支持和厚爱,我会一如既往的帮助大家完成爬虫工程师从入门到放弃的升华. 好,Previous on  系 ...

  4. Codevs 3287 货车运输 2013年NOIP全国联赛提高组(带权LCA+并查集+最大生成树)

    3287 货车运输 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description A 国有 n 座 ...

  5. CF Round#240题解

    第一次参加CF的比赛,MSK19.30,四个小时的时差真心累,第一次CODE到这么夜-- 一开始做了A,C两题,后来做B题的时候我体力和精神集中度就很低了,导致一直WA在4-- 今天起床后再刷B,终于 ...

  6. Nginx 第三方模块-漫谈缘起

    http://www.cnblogs.com/yjf512/archive/2012/03/30/2424726.html http://chenxiaoyu.org/2011/10/30/nginx ...

  7. js获取url的get传值函数

    function getvl(name) { var reg = new RegExp("(^|\\?|&)"+ name +"=([^&]*)(\\s| ...

  8. GPUImage 滤镜头文件

    #import "GLProgram.h" // Base classes #import "GPUImageOpenGLESContext.h" #impor ...

  9. csu 10月 月赛 B 题 Scoop water

    一个卡特兰数的应用: 卡特兰数主要有以下几个用途: 1.不同的出栈入栈数: 2.n个点组成的不同的二叉树的数目: 3.凸多边形的三角剖分划分: 4.括号化问题: 通项公式是:h(n) = C(2n-2 ...

  10. discuz 门户栏目URL跳转异常的问题

    “SEO设置-URL静态化”的问题.