Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案
    对象关系映射(英语:Object Relational Mapping,简称ORM),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。

    下载:Install-Package EntityFramework -Version 6.1.3  (7.0只有CodeOnly模式)

    本节技术概览:数据库的安装DB First,Model FirstCode First(重点)DbContext,DbSetCRUD例子数据迁移以及事务管理

LocalDB和SQL Server安装

  LocalDb是visual studio自带的,用来开发使用。运行是采用进程形式而非服务形式。

  位置:C:\Program Files\Microsoft SQL Server\110\Tools\Binn\SqlLocalDB.exe(这是vs 2013的位置,使用VS2013开发人员工具输入sqllocaldb即可)

  SQL Server采用服务方式,方便连接管理。可以去itellyou.cn下载。

连接

  可以直接用vs连接这2种数据库。连接localdb

DB First,Model First

  

DB First采用通常的数据库先行的办法,常见,稳定。基本下一步下一步就能完成。

Model First在VS中 画模型图,来生成数据库和Object,不方便控制数据库。

这2个都会产生edmx文件(xml),包含SSDL(数据定义),CSDL(类定义),CS Mapping(数据类映射)

在edmx模型查看中,不会把所有表都显示。当2个表的关系为多对多的时候,关系表会由一条多对多的线来表示。

在Model Browser中,可以看到存储过程,视图等非表的信息。

CodeFirst

  在EF7中,只有Code Only 说明Code First的重要性。在使用中,中小型项目,我也推荐使用,毕竟开发效率提高了不止一点点。

创建POCO

    public class App
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<AppData> AppDatas { get; set; }
} public class AppData
{
public int Id { get; set; }
public string Name { get; set; }
public string Value { get; set; }
public virtual App App { get; set; }
}

创建DbContext

    public class AppContext : DbContext
{
public AppContext()
: base("AppDb") //AppDb数据库库名
{ }
public DbSet<App> Apps { get; set; }
public DbSet<AppData> AppDatas { get; set; }
}

文件结构:

app.config

<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
</configuration>

App.Config

Main方法

        static void Main(string[] args)
{
using (var ctx = new AppContext())
{
var app = new App() { Name = "博客园" };
var data = new[]
{
new AppData() {Name = "最新博客", Value = "XX", App = app},
new AppData() {Name = "48小时阅读排行", Value = "YY", App = app}
};
ctx.Apps.Add(app);
ctx.AppDatas.AddRange(data);
ctx.SaveChanges();
}
}

连接数据库,查看数据库。

        

DbContext,DbSet

  在EF中,DbContext相当于一个数据库,DbSet则相当于一个数据表或者视图。

数据迁移

当业务改变,POCO类需要改变,表也需要改变。

EF的数据迁移通过 NuGet 来进行。

打开程序包管理器控制台(Package Manager Console),键入“get-help EntityFramework”命令,可以获得相关的帮助信息。

Enable-Migrations [-Force]

Add-Migration

Update-Database

Get-Migrations

如:加一个Title属性

    public class App
{
public int Id { get; set; }
public string Name { get; set; }
public string Title { get; set; } //add prop
public virtual ICollection<AppData> AppDatas { get; set; }
}

启动迁移功能

文件结构

生成改变

如果觉得太麻烦,可以使用以下方式

    public class AppContext : DbContext
{
public AppContext()
: base("AppDb") //AppDb数据库库名,也可以换成连接字符串
{
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<AppContext>());
}
public DbSet<App> Apps { get; set; }
public DbSet<AppData> AppDatas { get; set; }
}

 CRUD例子:

            using (var ctx = new AppContext())
{
//crud
#region create
var app = new App() { Name = "博客园" };
var data = new[]
{
new AppData() {Name = "最新博客", Value = "XX", App = app},
new AppData() {Name = "48小时阅读排行", Value = "YY", App = app}
};
ctx.Apps.Add(app);
ctx.AppDatas.AddRange(data);
ctx.SaveChanges();
#endregion #region update
app.Name = "Never、C";
ctx.SaveChanges();
//or
ctx.Apps.AddOrUpdate(app);
#endregion #region read
app = ctx.Apps.FirstOrDefault(o => o.Name == "博客园");
Console.WriteLine(app);
#endregion #region delete
ctx.Apps.Remove(app);
#endregion
}

EF CRUD

事务管理

对于一个ORM框架,支持事务操作是必须的。

我们的每一次SaveChanges就是一个事务操作,只需要在所有更改都完成后,调用这个方法就可以了。

如果你不愿意,可以手动的开启事务的代码 :

DbConnection con = ((IObjectContextAdapter)ctx).ObjectContext.Connection;
con.Open();
using (var tran = con.BeginTransaction())
{
  // 这里才是事务中的代码

tran.Commit();
}
con.Close();

以上是针对一个DbContext,也就是一个数据库的时候,如果操作涉及到多个数据库,还是使用分布式事务操作比较靠谱。

使用分布式事务处理,需要Windows系统的支持,所以,我们需要将系统的MSDTC服务开启。

代码下载:EFTest.zip

[ORM] Entity Framework(1) CodeFirst快速入门的更多相关文章

  1. [ORM] Entity Framework(2) CodeFirst进阶

    在上一节中,实现了CodeFirst快速入门.但是很多与数据库的细节还无法自定义.以及使用EF过程中,需要注意的事项. 在本节中,会涉及到以下 EF中的连接字符串 EF的对象状态 延迟加载,为什么需要 ...

  2. 实体框架Entity Framework 4.1快速入门

    介 绍 在旧的Entity 框架中,开发者可以从已存在的数据库中产生业务实体的模型,这种开发方法被称为数据库驱动的开发方法.而在4.1的Entity Framework中,支开发者先创建实体业务类,然 ...

  3. 在Oracle中使用Entity Framework 6 CodeFirst

    项目中需要将系统从SQLServer数据库迁移到Oracle上.由于原大部分数据访问操作都是通过包装了Entity Framework的统一访问入口实现的,所以需要研究Entity Framework ...

  4. [转]Using Entity Framework (EF) Code-First Migrations in nopCommerce for Fast Customizations

    本文转自:https://www.pronopcommerce.com/using-entity-framework-ef-code-first-migrations-in-nopcommerce-f ...

  5. C# ORM—Entity Framework 之Code first(代码优先)(二)

    一.Entity Framework Code first(代码优先)使用过程 1.1Entity Framework 代码优先简介 不得不提Entity Framework Code First这个 ...

  6. [EF1]POCOs(Plain Old C# Object)Entity Framework 4.x: POCOs入门

    原文链接:http://www.cnblogs.com/hjzhang/archive/2011/05/18/2050530.html POCOs 是在Visual Studio 2010和ASP.N ...

  7. C# ORM—Entity Framework 之Database first(数据库优先)&Model First(模型优先)(一)

    一.什么是Entity Framework 1.1 实体框架(EF)是一个对象关系映射器,使.NET开发人员使用特定于域的对象与关系数据.它消除了需要开发人员通常需要编写的大部分数据访问代码.简化了原 ...

  8. ASP.NET Core 入门教程 8、ASP.NET Core + Entity Framework Core 数据访问入门

    一.前言 1.本教程主要内容 ASP.NET Core MVC 集成 EF Core 介绍&操作步骤 ASP.NET Core MVC 使用 EF Core + Linq to Entity ...

  9. Entity Framework - PostgresQL CodeFirst

    经过几年的更新及业界对Entity Framework 的认同. 现在 EF 可以支持的数据库越来越多了.而PostgresQL 数据库现在也可以使用code first的方式来创建数据库了. 不多说 ...

随机推荐

  1. Scala 深入浅出实战经典 第60讲:Scala中隐式参数实战详解以及在Spark中的应用源码解析

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  2. OpenSSL命令---pkcs8

    用途: pkcs8格式的私钥转换工具.它处理在PKCS#8格式中的私钥文件.它可以用多样的PKCS#5 (v1.5 and v2.0)和 PKCS#12算法来处理没有解密的PKCS#8 Private ...

  3. Eclipse远程调试HDP源代码

    使用的是自己编译的HDP2.3.0的源代码编译的集群,此文介绍如何使用Eclipse远程调试Hadoop内核源代码,以调试namenode为例进行介绍. 在/usr/hdp/2.3.0.0-2557/ ...

  4. webpack 打包时到底如何组织js

    问题一:引入前端库,方法也是不一样的 比如 lodash.js ,作为一个 chunk 用 html-webpack-plugin 打包到页面里,会生成一个全局变量 window._ ,在其它 js ...

  5. ubuntu14.04LTS安装vmware10.0.1

    因为所用Ubuntu系统是32位,而VMware最新版本又不支持32位,只好下载以前版本vmware10.0.1. vmware10.0.1下载地址:  http://down.it168.com/1 ...

  6. 找回Win8.1(windows server 2012 R2)的双拼

    一.微软拼音的选项,只能在metro界面修改: 鼠标移动到屏幕右下,出现metro的菜单,选"设置"然后选最下面的"更改电脑设置" 时间和设置->区域和语 ...

  7. (笔记)Linux内核学习(十)之虚拟文件系统概念

    虚拟文件系统 虚拟文件系统:内核子系统VFS,VFS是内核中文件系统的抽象层,为用户空间提供文件系统相关接口: 通过虚拟文件系统,程序可以利用标准Linux文件系统调用在不同的文件系统中进行交互和操作 ...

  8. dnspod动态域名使用感受

    继花生壳不能用之后,3322也开始不太好用了,首先就是360把所有3322的域名全部判定为危险域名,甚至拦截程序对于3322url的api请求. 所以想把3322换成我们自己的独立域名,但是3322他 ...

  9. WinStore之Application Data

    一.Application Data简介 Applicaion Data相当于桌面应用的注册表,存储一些用户配置信息,如运行时状态,用户喜好等,需要注意的时,当卸载应用时,这些数据会被删除,所以不要存 ...

  10. led显字风扇原理?

    神奇的是上面的图案居然会变,十分好奇,求告知原理?? 其实就是依靠转速计算出LED灯变化的频率.这点和老式CRT的显示原理差不多.比如说风扇的转速时60rpm就是每分钟60圈,每秒1圈(当然实际转速快 ...