.NET:Entity Framework 6.1笔记

EF6越来越完善,跟主流的Hibernate等ORM框架越来越接近了,先看下Entity类的定义:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace EFSample.Model
{

    [Table("T_ORDER")]
    public class Order
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int ID { set; get; }

        [StringLength(50)]
        [Column("CUSTOMER_NAME")]
        public String CustomerName { set; get; }

        [Column("AMOUNT")]
        public decimal Amount { set; get; }

        public virtual ICollection<OrderItem> OrderItems { set; get; }

    }
}

 1 using System;
 2 using System.ComponentModel.DataAnnotations;
 3 using System.ComponentModel.DataAnnotations.Schema;
 4
 5 namespace EFSample.Model
 6 {
 7     [Table("T_ORDER_ITEM")]
 8     public class OrderItem
 9     {
10         [Key]
11         [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
12         public int ID { set; get; }
13
14         [ForeignKey("Order")]
15         [Column("ORDER_ID")]
16         public int OrderID { set; get; }
17
18         [StringLength(50)]
19         [Column("PRODUCT_NAME")]
20         public String ProductName { set; get; }
21
22         [Column("PRICE")]
23         public Decimal Price { set; get; }
24
25         [Column("QUANTITY")]
26         public int Quantity { set; get; }
27
28         public virtual Order Order { set; get; }
29
30
31     }
32 }

光看Attribute,已经跟Hibernate的Annotation很相似了。

配置文件:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <configuration>
 3   <configSections>
 4     <section name="entityFramework"
 5        type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
 6   </configSections>
 7
 8   <entityFramework>
 9     <contexts>
10       <context type="EFSample.DAL.OrderContext, EFSample" disableDatabaseInitialization="false">
11         <databaseInitializer type="EFSample.DAL.OrderInitializer, EFSample" />
12       </context>
13     </contexts>
14     <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
15       <parameters>
16         <parameter value="v11.0" />
17       </parameters>
18     </defaultConnectionFactory>
19     <providers>
20       <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
21     </providers>
22   </entityFramework>
23
24   <startup>
25     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" />
26   </startup>
27
28   <connectionStrings>
29     <!--连接字符串,使用SQLSERVER LocalDb-->
30     <add name="MyConn" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=OrderDatabase;Integrated Security=SSPI;" providerName="System.Data.SqlClient" />
31   </connectionStrings>
32
33 </configuration>

注:LocalDb在开发阶段很方便,但是试用中有一个小问题,如果把生成的mdf物理文件删除后,再次运行总是报错(不知道是不是个别现象),只能把Initial Catalog=OrderDatabase中的文件名改成其它名称(比如:Catalog=OrderDb),才能正常运行。

此外,NuGet Package Manager工具搞得象java的maven一样,可以自动联机下载所需的依赖项,Tools->NuGet Package Manager

输入

Install -Package EntityFramework

就能自动向project添加相关的dll引用

DbContext

 1 using EFSample.Model;
 2 using System.Data.Entity;
 3 using System.Data.Entity.ModelConfiguration.Conventions;
 4
 5 namespace EFSample.DAL
 6 {
 7     public class OrderContext:DbContext
 8     {
 9         public OrderContext() : base("MyConn") { }
10
11         public DbSet<Order> Orders { set; get; }
12
13         public DbSet<OrderItem> OrderItems { set; get; }
14
15         protected override void OnModelCreating(DbModelBuilder modelBuilder)
16         {
17             modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
18         }
19     }
20 }

示例代码:

 1 using EFSample.DAL;
 2 using EFSample.Model;
 3 using System;
 4 using System.Collections.Generic;
 5 using System.Linq;
 6
 7 namespace EFSample
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             using (var db = new OrderContext())
14             {
15
16                 //直接执行Sql语句
17                 db.Database.ExecuteSqlCommand("delete from t_order");
18
19                 var orders = new List<Order>(){
20                     new Order{ CustomerName="jimmy.yang",Amount=200, OrderItems=new List<OrderItem>(){
21                         new OrderItem(){ Price=10, Quantity=20, ProductName="Mobile"}
22                     }},
23                     new Order{ CustomerName="杨俊明",Amount=300, OrderItems=new List<OrderItem>(){
24                         new OrderItem(){ Price=15, Quantity=20, ProductName="架构之美"}
25                     }}};
26
27                 //批量添加记录
28                 db.Orders.AddRange(orders);
29
30                 //提交到db
31                 db.SaveChanges();
32
33                 //查询
34                 var query = db.Orders.Where(c => c.CustomerName == "Jimmy.yang").AsQueryable();
35
36                 //输出Sql语句
37                 Console.WriteLine(query.ToString());
38
39                 List<Order> orderEntities = query.ToList();
40
41                 foreach (var order in orderEntities)
42                 {
43                     Console.WriteLine(String.Format("ID:{0}/CustomerName:{1}/Amount:{2}/ItemCount:{3}", order.ID, order.CustomerName, order.Amount,order.OrderItems.Count));
44                 }
45             }
46
47             Console.WriteLine("ok!");
48             Console.Read();
49         }
50     }
51 }

输出:

SELECT
[Extent1].[ID] AS [ID],
[Extent1].[CUSTOMER_NAME] AS [CUSTOMER_NAME],
[Extent1].[AMOUNT] AS [AMOUNT]
FROM [dbo].[T_ORDER] AS [Extent1]
WHERE N‘Jimmy.yang‘ = [Extent1].[CUSTOMER_NAME]

ID:9/CustomerName:jimmy.yang/Amount:200/ItemCount:1
ok!

时间: 2024-07-28 16:52:32

.NET:Entity Framework 6.1笔记的相关文章

Entity Framework 6 学习笔记2 — 增、删、改、显示简单代码示例

前言 通过 “Entity Framework 6 学习笔记1 — 介绍和安装方法”文章我相信大家对EF的安装应该没什么问题了,整体安装还是比较简单的,只需要通过Nuge搜索EF然后安装就可以了,这也体现了微软一贯原则–“简单”. 安装完了我想很多朋友也着急想体验下EF的好处了吧,今天我就通过EF框架对增.删.改操作做一个简单示例. 创建表 这里我只是做示例所以就创建了一个表并且字段也很少.下面是sql语句,大家可以直接复制生成表结构.   CREATE TABLE Book   (   Id

Entity Framework Linq 简单笔记

类型查询 public class bbb:xxx {} var items = from c in context.Dbset<xxx>    where c is bbb   select c;var items = from c in context.Dbset<xxx> .OfType<bbb>()  select c;

Entity Framework + MySQL 使用笔记

添加: 1 using (var edm = new NorthwindEntities()) 2 3 { 4 5 Customers c = new Customers { CustomerID = "c#", City = "成都市", Address = "中国四川省", CompanyName = "cnblogs", Country = "中国", Fax = "10086",

Entity Framework笔记(一)

最近在看MVC方面的资料,看了几个教程都在使用Entity Framework做数据持久化.之前也听说过这个东西,在微软的网站上看过一个演示视频,但都没怎么去仔细研究.MVC的东西太庞大了,先慢慢熟悉着.但可以从其中的一个部分入手,先学习Entity FrameWork.当作笔记,哪天翻出来温故. 简单说,EF是一个ORM解决方案,是微软出的东西.这里,主要记录如何使用,至于它的来龙去脉,可以网上搜搜.现在就开始用VS2010创建Console项目,并且使用EF作为和数据库打交道的工具.VS20

Entity Framework 学习笔记(2)

上期回顾:Entity Framework 学习笔记(1) Entity Framework最主要的东西,就是自己创建的.继承于DbContext的类: /// <summary> /// Context相当于一个数据库 /// </summary> public class MusicContext : DbContext { //base("LocalDB")表示要用到config文件中的名为"LcoalDB"的连接字符串 public

ADO.NET Entity Framework学习笔记(3)ObjectContext

ADO.NET Entity Framework学习笔记(3)ObjectContext对象[转] 说明 ObjectContext提供了管理数据的功能 Context操作数据 AddObject 添加实体 将实体添加到集合中, 创建实体时,状态为EntityState.Detached 当调用AddObject将实体添加到Context时,状态为EntityState.Added myContext context = new myContext(); myTab r = new myTab(

Entity Framework笔记(二)

前几日学习了在VS2010Console项目中使用Entity Framework,并且使用Code First模式.通过编写Model类,来生成数据库对应的表.并且,往表中写入数据以及获取表中的所有数据.这与实际应用还差很远,还没能够对数据库进行增删查改的全部操作.这一篇,记录EF中怎么进行其他的sql操作. 前一篇中,写了一个SaveUser方法.该方法向数据库中插入一条Users类的实例数据,其中使用的是userDal.user.Add()方法.将光标放到Add方法处,F12导航到该方法所

Entity Framework 学习笔记(一)之数据模型 数据库

关于Entity Framework  数据模型 的开发有三种模式:1.引用数据库方式:2.在VS中新建EF空模型Model 方式:3.Code 方式 Entity Framework  数据模型  引用"引用数据库方式"进行开发创建的使用,具体如下: 开发环境:VS2012 数据库:SQL Server 2008 Entity Framework  版本:6.12 1.新建数据库 在数据库中新建数据库,并创建数据表,以下截图只供参考: 2.新建项目 在VS中新建一个控制台应用程序 F

Entity Framework 学习笔记(二)之数据模型 Model 使用过程

欢迎大家加入我们:ASP.NET交流群(1群) ExtJs4.2交流群(3群) 97869295 Entity Framework  数据模型 Model 创建的使用: 开发环境:VS2012 数据库:SQL Server 2008 Entity Framework  版本:6.12 下面是新建的项目架构:(当然这是我的项目架构,只是参考) 1. 新建项目 新建一个控制台项目即可 :Future.LifeWillBetter.DAL.ForModel.ConsoleApplication 如图: