一、代码优先Code First

EF6支持Oracle ODT 12C Release 3 (net4.5)

DataModel(类)——》生成数据库DB

存在的数据库DB——》生成的数据模型(类)

二、创建或生成Model代码

(可利用Entity FrameWork Power Tools 生成Model代码)

先安装EFTools6.1ForVS2012 ,EF6.1版以上用EntityFramework.CodeTeplates.Csharp及自带的模板。

方式1、使用标注

/// <summary>
/// 景点类
/// </summary>
[Table("DESTINATIONS", Schema = "PAMS")]
public class Destination
{
[Column("DESTINATIONID", TypeName = "INT")]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int DestinationId { get; set; } [Column("NAME")]
public string Name { get; set; } [Column("COUNTRY")]
public string Country { get; set; } [Column("DESCRIPTION")]
public string Description { get; set; } [Column("PHOTO")]
public byte[] Photo { get; set; } public virtual List<Lodging> Lodgings { get; set; }
} /// <summary>
/// 住宿类
/// </summary>
[Table("LODGINGS", Schema = "PAMS")]
public class Lodging
{
[Column("LODGINGID", TypeName = "INT")]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int LodgingId { get; set; } [Column("NAME")]
public string Name { get; set; } [Column("OWNER")]
public string Owner { get; set; } [Column("TARDESTINATIONID", TypeName = "INT")]
public int? DestinationID { get; set; } [ForeignKey("DestinationID")]
public Destination Destination { get; set; }
} /// <summary>
/// 度假村类
/// </summary>
public class Resort : Lodging
{
[Column("ENTERTAINMENT")]
public string Entertainment { get; set; }
} /// <summary>
/// 宿舍类
/// </summary>
public class Hostel : Lodging
{
[Column("MAXROOM", TypeName = "INT")]
public int? MaxRoom { get; set; }
}

方式2:使用模板Builder

public class BreakAwayContext : DbContext
{
public DbSet<CodeFirst.Model.Destination> Destinations { get; set; }
public DbSet<CodeFirst.Model.Lodging> Lodgings { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new DestinationMap());
modelBuilder.Configurations.Add(new LodgingMap());
}
}
public class DestinationMap : EntityTypeConfiguration<CodeFirst.Model.Destination>
{
public DestinationMap()
{
this.HasKey(t => t.DestinationId);
Property(d => d.Name).IsRequired();
Property(d => d.Description).HasMaxLength();
} }
public class LodgingMap : EntityTypeConfiguration<CodeFirst.Model.Lodging>
{
public LodgingMap()
{
this.HasKey(t => t.LodgingId);
Property(d => d.Name).IsRequired();
Property(d => d.Owner).HasMaxLength();
this.Map<Lodging>(d => d.Requires("TYPE").HasValue("Standard"));
this.Map<Resort>(d => d.Requires("TYPE").HasValue("Resort"));
this.Map<Hostel>(d => d.Requires("TYPE").HasValue("Hostel"));
}
}

三、配置文件

<connectionStrings>
<add name=”BreakAwayContext ”, conectionstring=”” providerName=””>
</connectionStrings>

四、操作

1、添加

var destination = new CodeFirst.Model.Destination
{
Country = "Indonesia",
Description = "EcoTourism at its best in exquisite Bali",
Name = "Bali"
};
using (var context = new CodeFirst.DataAccess.BreakAwayContext())
{
if (context.Destinations.Count((t => t.Name == "Bali") < )
{
context.Destinations.Add(destination);
context.SaveChanges();
}
}

2、修改

using (var context = new CodeFirst.DataAccess.BreakAwayContext())
{
var canyon = (from d in context.Destinations where d.Name == "Bali" select d).Single();
canyon.Description = "227 mile long canyon.";
    context.Entry(gw)=EntityState.Modified;
context.SaveChanges();
}

3、删除

using (var context = new CodeFirst.DataAccess.BreakAwayContext())
{
//var toDelete = new CodeFirst.Model.Destination { d.Name="Bali"};
//context.Destinations.Attach(toDelete); //attach,状态由added改为unchanged
//context.Destinations.Remove(toDelete);
//context.SaveChanges(); context.Database.ExecuteSqlCommand("delete from pams.DESTINATIONS where Name='Bali'");//直接执行sql, }

五、查询

1、Load方法把数据加载到内存(LINQ写法,同foreach)

using (var context = new CodeFirst.DataAccess.BreakAwayContext())
{
var query = from d in context.Destinations where d.Country == "Australia" select d;
query.Load();// foreach 也可以
var count = context.Destinations.Local.Count;
}

2、ToList()一次性从数据库中查出数据

var Invoices=ctx.Invoie.ToList();
foreach(var result in Onvoices)
{.}

3、Find方法根据键值先从内存中查询,内存中没有才查询数据库。

var destination = context.Destinations.Find();

4、Single(),SingleOrDefault(),First()等可根据条件直接从数据库查。

var destination = context.Destinations.SingleOrDefault(d => d.Name == "Bali");

六、直接执行SQL语句

1、context.Database.ExecuteSqlCommand("delete from pams.DESTINATIONS where Name='Bali'");//直接执行sql,

2、 IEnumerable<Lodging> a=context.Database.SqlQuery(“Select * from ..”) 可直接转为定义的实体类型,任何类型,EF不跟踪

3、DbSqlQuery<Lodging> c=context.Lodging.SqlQuery(“select* from ..) EF跟踪返回的对象。

4、modelBuilder.Entity<singleEntity>().HasEntitySetName(“MyEntity”) 创建实体集不需要在DBContext中定义

IEnumerable<Lodging> a=(Context as IObjectContextAdapter).ObjectContext.CreateQuery<Lodging>(“select * from ..”) 这以后的linq查询条件可合并为一个SQL

Entity Framework:代码优先的更多相关文章

  1. Entity Framework 代码先行

    一.什么是Code First 为了支持以设计为中心的开发流程,EF还更多地支持以代码为中心 (code-centric) ,我们称为代码优先的开发,代码优先的开发支持更加优美的开发流程,它允许你在不 ...

  2. Linq to Entities,ADO.NET Entity Framework 模型优先

    一.概念: Database First(数据库优先):存在的DB------------->生成Data Model  .edmx文件 Model First(模型优先):Data Model ...

  3. Entity Framework 代码先行之约定配置

    要更改EF中的默认配置有两个方法,一个是用Data Annotations(在命名空间System.ComponentModel.DataAnnotations;),直接作用于类的属性上面;还有一个就 ...

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

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

  5. Entity Framework Code first(转载)

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

  6. Entity Framework 6.X实现记录执行的SQL功能

    Entity Framework在使用时,很多时间操纵的是Model,并没有写sql语句,有时候为了调试或优化等,又需要追踪Entity framework自动生成的sql(最好还能记录起来,方便出错 ...

  7. 使用Entity Framework 4进行代码优先开发

    [原文地址]Code-First Development with Entity Framework 4   .NET 4随带发布了一个改进版的Entity Framework(EF)- 一个位于Sy ...

  8. Entity Framework 之Database first(数据库优先)&Model First(模型优先)

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

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

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

随机推荐

  1. hadoop-0.20.2安装配置

    该环境在Vmware Workstation 12 上安装配置一共三台机器master,slave1,slave2. 操作系统:Cenos 7.0 hadoop 版本:hadoop-0.20.2,版本 ...

  2. 14 线程间协作的两种方式:wait、notify、notifyAll和Condition

    原文链接:http://www.cnblogs.com/dolphin0520/p/3920385.html 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者- ...

  3. linux安装教程以及使用时遇到的问题和解决方法

    以后开发都是要用linux,所以就安装了ubuntu,也是第一次用linux的系统.装的是win7+Ubuntu16.04的双系统. 安装过程如下:我用的是U盘安装,参看http://www.jian ...

  4. jQueryEasyUI 学习笔记

    jQuery EasyUI是什么? jQuery EasyUI是一组基于jQuery的UI插件集合体,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面.开 ...

  5. [转]OData – the best way to REST–实例讲解ASP.NET WebAPI OData (V4) Service & Client

    本文转自:http://www.cnblogs.com/bluedoctor/p/4384659.html 一.概念介绍 1.1,什么是OData? 还是看OData官网的简单说明: An open ...

  6. TCP/IP提供网络传输速率

    丢包(超时)->减少超时时间->ECN(有网络设备通知终端,有丢包发生)->DCTCP(优化快恢复) 丢包是超时的充分条件,但不是必要条件,因此也可通过其他方式获得丢包是否发生,比如 ...

  7. php访问mysql数据库的步骤

    官方说5.5开始就废弃mysql_query()这块东西很多,当然常用的就几个还是看手册吧. 这里简单记录一下.在我失忆之后可以找回一点记忆.最近一直用框架原生的都快忘了. 1.打开mysql连接 $ ...

  8. ComBox、listBox、checklistBox控件

    omBox控件被称为下拉组合框控件,是由System.windows.Forms.ComBox类提供的,主要作用是讲一个集合数据以组合框的形式显示给用户,当用户单击时将以下拉框显示给用户,供用户选择一 ...

  9. 《Centos服务器版安装教程》

    安装前准备: (1)  首先大家需要在电脑上安装一个VMware (2)  Centos7系列的一个服务器版镜像 有了这两样东西,下面我们就开始安装了 一.     打开VMware,新建一个虚拟机 ...

  10. Spring学习笔记:spring与mybatis四种整合方法

    1.采用数据映射器(MapperFactoryBean)的方式,不用写mybatis映射文件,采用注解方式提供相应的sql语句和输入参数.  (1)Spring配置文件: <!-- 引入jdbc ...