Entity Framework:代码优先
一、代码优先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:代码优先的更多相关文章
- Entity Framework 代码先行
一.什么是Code First 为了支持以设计为中心的开发流程,EF还更多地支持以代码为中心 (code-centric) ,我们称为代码优先的开发,代码优先的开发支持更加优美的开发流程,它允许你在不 ...
- Linq to Entities,ADO.NET Entity Framework 模型优先
一.概念: Database First(数据库优先):存在的DB------------->生成Data Model .edmx文件 Model First(模型优先):Data Model ...
- Entity Framework 代码先行之约定配置
要更改EF中的默认配置有两个方法,一个是用Data Annotations(在命名空间System.ComponentModel.DataAnnotations;),直接作用于类的属性上面;还有一个就 ...
- C# ORM—Entity Framework 之Code first(代码优先)(二)
一.Entity Framework Code first(代码优先)使用过程 1.1Entity Framework 代码优先简介 不得不提Entity Framework Code First这个 ...
- Entity Framework Code first(转载)
一.Entity Framework Code first(代码优先)使用过程 1.1Entity Framework 代码优先简介 不得不提Entity Framework Code First这个 ...
- Entity Framework 6.X实现记录执行的SQL功能
Entity Framework在使用时,很多时间操纵的是Model,并没有写sql语句,有时候为了调试或优化等,又需要追踪Entity framework自动生成的sql(最好还能记录起来,方便出错 ...
- 使用Entity Framework 4进行代码优先开发
[原文地址]Code-First Development with Entity Framework 4 .NET 4随带发布了一个改进版的Entity Framework(EF)- 一个位于Sy ...
- Entity Framework 之Database first(数据库优先)&Model First(模型优先)
一.什么是Entity Framework 1.1 实体框架(EF)是一个对象关系映射器,使.NET开发人员使用特定于域的对象与关系数据.它消除了需要开发人员通常需要编写的大部分数据访问代码.简化了原 ...
- C# ORM—Entity Framework 之Database first(数据库优先)&Model First(模型优先)(一)
一.什么是Entity Framework 1.1 实体框架(EF)是一个对象关系映射器,使.NET开发人员使用特定于域的对象与关系数据.它消除了需要开发人员通常需要编写的大部分数据访问代码.简化了原 ...
随机推荐
- elasticsearch 6.x 安装与注意
1. 下载,解压 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.tar.gztar -zx ...
- <机器学习实战>读书笔记--朴素贝叶斯
1.朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法, 最为广泛的两种分类模型是决策树模型(Decision Tree Model)和朴素贝叶斯模型(Naive Bayesian Model, ...
- NSSM - the Non-Sucking Service Manager
nssm is a service helper which doesn't suck. srvany and other service helper programs suck because t ...
- [转]SSRS: Checking for Divide By Zero Using Custom Code
本文转自:http://salvoz.com/blog/2011/11/25/ssrs-checking-for-divide-by-zero-using-custom-code/ I encount ...
- SQL Server将DataTable传入存储过程(Table Value Parameter)
博主在做毕业设计的时候,需要用到事务处理和多次将数据写入不同的表中,但是 SQL Server 数据库是不支持数组类型变量的,想要实现数组的功能,可以通过 XML 和数据表的方法实现,但是实现方法非常 ...
- mac obs直播软件 无法输出音频解决办法
搜索大量的网页,确没有一个实用的设置教程,也正是speechless. 直接做个教程,方便大家的使用 1.安装 boom 2 到app store 上搜索boom 我安装的是正版的,需要128元. 你 ...
- JAVA基础之——数据结构
JAVA数据结构有8种,如下所示,本文从使用场景,优缺点方面讲解. 1 数组Array ArrayList 使用场景:有序的存储同一类型数据的集合,固定大小 优点:通过索引查找方便 缺点:插入或删除一 ...
- K:求取数组中最大连续子序列和的四个算法
相关介绍: 求取数组中最大连续子序列和问题,是一个较为"古老"的一个问题.该问题的描述为,给定一个整型数组(当然浮点型也是可以的啦),求取其下标连续的子序列,且其和为该数组的所有 ...
- slider轮播插件的多种写法
slider轮播插件相信大家经常会用到,写法也是各种各样,大部分都是用的第三方提供的组件使用,如果想基于自己的业务特点封装个组件供自己使用的话就要自己封装组件了,网上看了大部分写法都是通过js控制do ...
- 原生canvas写的飞机游戏
一个原生canvas写的飞机游戏,实用性不大,主要用于熟悉canvas的一些熟悉用法. 项目地址:https://github.com/BothEyes1993/canvas_game