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是用可视化的方式描述了实体模型。

建议看看这几篇文章:

EF框架step by step(1)—Database-First

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

EF框架step by step(3)—Code-First

下面分析这三种方式的优缺点:

Database-First模式明显性能会差点,但是它很适合初学者,或者是比较急的小型项目。还有一点,我们在做项目时可能不容易体会到它的好处,但如果做数据库结构比较成熟稳定的产品时,我们可以很轻松的使用数据库生成实体模型,从而实现快速开发。

Model-First模式优点是开发人员能够在模型设计完成后,可以利用VS等工具快速生成数据库脚本。缺点是设计模型时完全了解数据库的结构,在模型中手动添加表关系,并且生成的脚本有点不简洁。

Code-First模式优点是性能比较好,且代码较少冗余。不过它的缺点也有很多,由于都是代码编写的,比如更新数据库。

这三种方式各有利弊,使用过程中我们要按实际需求来选择。这些工具的出现和使用,大大提高了开发人员的开发速度,使得数据库、模型等出现了复用、扩展的可能,在应对变化方面也做了足够的工作。这些工具所体现的服务思想更提醒我们要全方位去考虑问题,在产品中做好应对变化的措施。

还是推荐code first,虽然EF Team没明说,但是从各种文档可以推断出来,他们本身是推荐使用code first的。
从我个人来说,我更习惯使用class代码来定义和表达各个实体的关系。另外code first也更容易做版本管理。
下一版本的EF7将code first放到了更重要的位置,model first可以说是名存实亡。总体来说,code first是趋势。

EF下CodeFirst、DBFirst与ModelFirst分析的更多相关文章

  1. 将EF项目从dbfirst转化为codefirst

    一个脚本服务的项目,之前是先设计的数据库表,采用EF的dbfirst做的映射.项目完成后,出现迁移瓶颈. 1.dbfirst项目,如果数据库表结构做了调整,需要重新映射 2.当出现表结构一致,但数据库 ...

  2. 一个支持DbFirst、ModelFirst和CodeFirst的数据库小工具DbTool

    DbTool 一个支持DbFirst.ModelFirst和CodeFirst的数据库工具. 简介 这是一个针对 SqlServer 数据库和 C# 开发语言的小工具,可以利用这个小工具生成数据库表对 ...

  3. 一个支持 CodeFirst/DbFirst/ModelFirst 的数据库小工具

    一个支持 CodeFirst/DbFirst/ModelFirst 的数据库小工具 Intro DbTool 是一个支持 CodeFirst/DbFirst/ModelFirst 的数据库小工具,原本 ...

  4. 写一个EF的CodeFirst的Demo

    写一个EF的CodeFirst的Demo 今天打算写一个关于EF的CodeFirs的一个小Demo.先略说一个EF的三种与数据库,怎么说,叫映射么,好吧,那就这么叫吧,就是一个是ModelFirst就 ...

  5. EF架构~CodeFirst数据迁移与防数据库删除

    回到目录 本文介绍两个概念,防数据库自动删除,这是由于在code first模式下,当数据实体发生变化时,会对原来数据库进行删除,并将新数据表添加进来,但这对于我们的运营环境数据库,是万万不能接受的, ...

  6. EF架构~codeFirst从初始化到数据库迁移

    一些介绍 CodeFirst是EntityFrameworks的一种开发模式,即代码优先,它以业务代码为主,通过代码来生成数据库,并且加上migration的强大数据表比对功能来生成数据库版本,让程序 ...

  7. 第十七节: EF的CodeFirst模式的四种初始化策略和通过Migration进行数据的迁移

    一. 四种初始化策略 EF的CodeFirst模式下数据库的初始化有四种策略: 1. CreateDatabaseIfNotExists:EF的默认策略,数据库不存在,生成数据库:一旦model发生变 ...

  8. 17.翻译系列:将Fluent API的配置迁移到单独的类中【EF 6 Code-First系列】

    原文链接:https://www.entityframeworktutorial.net/code-first/move-configurations-to-seperate-class-in-cod ...

  9. 16.翻译系列:EF 6 Code -First中使用存储过程【EF 6 Code-First系列】

    原文链接:https://www.entityframeworktutorial.net/entityframework6/code-first-insert-update-delete-stored ...

随机推荐

  1. SET ROWCOUNT,SET NOCOUNT

    SET ROWCOUNT (Transact-SQL) 在停止特定查询之前要处理的行数(整数). 重要提示 在 SQL Server 的将来版本中,使用 SET ROWCOUNT 将不会影响 DELE ...

  2. org.springframework.orm.hibernate3.support.OpenSessionInViewFilter作用

    在Spring与Hibernate集成时在web.xml要加入这样的过滤器: <filter> <filter-name>openSessionInView</filte ...

  3. API、ABI区别

    http://blog.csdn.net/xinghun_4/article/details/7905298 应用程序二进制接口(ABI-Application Binary Interface)定义 ...

  4. Openjudge计算概论-DNA排序

    /*===================================== DNA排序 总时间限制: 1000ms 内存限制: 65536kB 描述 给出一系列基因序列,由A,C,G,T四种字符组 ...

  5. 【转】object标签和embed标签

    我们现在大部分人做网页,都是直接用DW插入flash,而且DW也是所见即所得,直接生成了相应的flash显示代码.可是我们又有多少人了解这些直接由DW生成的代码呢?其实我接触flash player标 ...

  6. 找不到所需要的ndbm.h头文件

    具体描述: 通过deb包安装gdbm之后,发现找不到所需要的ndbm.h头文件.但是你会发现一个叫gdbm-ndbm.h的文件,你只需要把文件名改成ndbm.h就可以了,当然需要一定权限. sudo ...

  7. ubuntu 安装 boost

    1.tar -zxvf  boost_1_43_0.tar.gz 2.cd boost_1_43_0, 执行: sudo ./bootstrap.sh sudo ./bjam install 检验安装 ...

  8. C#动态数组ArrayList和List<T>的比较

    C#中一维动态数组(即列表)分ArrayList和List<T>两种,其容量可随着我们的需要自动进行扩充 一.ArrayList类(少用) ArrayList位于System.Collec ...

  9. [mysql] mysql explain 使用

    explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. 先解析一条sql语句,看出现什么内容 EXPLAINSELECTs.uid, ...

  10. 控制DIV占满屏幕

    网上找了很多帖子,希望是CSS控制的,但是在bootstrap环境下, 控制方式上有点问题.达不到想要的效果. 项目中需要实现的效果: DIV区域占满当前窗口的高度.且在ctrl+鼠标滚轮调整窗口大小 ...