• 1)概念

    Entity Framework:

     全称ADO.NET Entity Framework,是微软开发的基于ADO.NET的ORM(Object/Relational Mapping)框架。百科解释:ADO.NET Entity Framework 以 Entity Data Model (EDM) 为主,将数据逻辑层切分为三块,分别为 Conceptual Schema, Mapping Schema 与 Storage Schema 三层,其上还有 Entity Client,Object Context 以及 LINQ 可以使用。其中

(1) 概念层:负责向上的对象与属性显露与访问。(用xml打开.edmx文件,对应csdl)
(2) 对应层:将上方的概念层和底下的储存层的数据结构对应在一起。(mapping)
(3) 储存层:依不同数据库与数据结构,而显露出实体的数据结构体,和 Provider 一起,负责实际对数据库的访问和 SQL 的产生(ssdl).
:但此处主要为记录应用和概念,暂且不做详细(有待后续补充),可百科Entity Framework,颇为详细。
此处应理解为,微软为了实现(ORM-数据库对象持久)的一个框架结构,其底层封装映射为实体化,其上层借助(DBcontex/DBset)将对数据库的操作转移为对实体的操作。

架构图如下:

Ÿ   ORM:

  ORM(Object/Relational Mapping) 对象关系映射,主要是把数据库中的关系数据映射称为程序中的对象(如Hibernate,EF)。

   Entity Framework 3种开发模式

    1.DataBase First

     指以数据库设计为基础,并根据数据库自动生成实体数据模型,从而驱动整个开发流程。使用简单,容易入手,适合初学者。

    2.Model First

  从建立实体数据模型入手,并依据模型生成数据库,从而驱动整个开发流程。是业界流行的面向领域的变成模式。优点在于,可以用与设计建模相同的思维进行编写,更符合面向对象的思想。model first 和database first是互逆的,但最终都是输出数据库和实体数据模型。

   3.Code Only

  指的是程序员完全通过手动编码,就可以使用Entity Famework 技术来实现数据访问。优点在于,支持POCO(plain old CLR Object,简单传统clr对象:大概为get set应用),代码整洁,灵活可控。适用于对EF比较熟悉的程序员。 注意:前一篇EF2:MVC EF First migration中的class movie就是此类例子。

注:详细3种模式应用例子,见下一篇EF3,EF3种应用模式。

  • 2)应用

  对应3中sample. 

  3.2 中ADO.Net实体数据模式,需要安装 Entity Framework,通过nuget安装。(工具/程序包管理器控制台/Install-Package EntityFramework)(Nuget是一个.NET平台下的开源的项目,它是Visual Studio的扩展。在使用Visual Studio开发基于.NET Framework的应用时,Nuget能把在项目中添加、移除和更新引用的工作变得更加快捷方便。) 

  3.3中新建连接,选择数据源,myslq数据源需要安装 mysql-for-vistudio添加数据源。

  mysql-connector-net:数据库开发驱动,支持数据库开发。

  vs服务器管理器/数据管理有对数据连接管理。

  项目config中 <connectionStrings>中对连接字符串设置:

<connectionStrings>
<add name="testEntities" connectionString="metadata=res://*/EFModel.csdl|res://*/EFModel.ssdl|res://*/EFModel.msl; provider=MySql.Data.MySqlClient;provider connection string=&quot;server=192.168.56.228;user id=wspt;password=123456;database=test&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>

  注意:(本人使用vs2013,不更新EF的情况下,使用EF5没有问题)如尝试使用EF6,网上众多介绍使用EF6有可能产生版本不对应问题,"您的项目使用最新版实体框架****" ,步骤如下:

1.nuget安装最新版EF

2.引用mysql-connet-net安装目录中众dll(其中包含ef6.dll)

3.在项目app.config中 provices节点添加

  1. <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
  • 3)Sample

  1.    创建一个工程EFMysqlSample02

  2.     在项目工程里添加(数据/ADO.Net实体数据模式)

  3.    EF模型:从数据库生成/新建连接(选定数据源和连接信息)  

 

  4.    选择表,命名,生成.edmx文件

 

  5.     生成 contenxt实体类(数据库操作类),表实体类。

  1. ///EFModel.Context.tt/EFModel.Context.cs
    namespace EFMysqlSample02
  2. {
  3. using System;
  4. using System.Data.Entity;
  5. using System.Data.Entity.Infrastructure;
  6.  
  7. public partial class testEntities : DbContext
  8. {
  9. public testEntities()
  10. : base("name=testEntities")
  11. {
  12. }
  13.  
  14. protected override void OnModelCreating(DbModelBuilder modelBuilder)
  15. {
  16. throw new UnintentionalCodeFirstException();
  17. }
  18.  
  19. public DbSet<user> users { get; set; }
  20. }
  21. }

 ///EFModel.tt/user.cs

  1. //------------------------------------------------------------------------------
  2. // <auto-generated>
  3. // 此代码是根据模板生成的。
  4. //
  5. // 手动更改此文件可能会导致应用程序中发生异常行为。
  6. // 如果重新生成代码,则将覆盖对此文件的手动更改。
  7. // </auto-generated>
  8. //------------------------------------------------------------------------------
  9.  
  10. namespace EFMysqlSample
  11. {
  12. using System;
  13. using System.Collections.Generic;
  14.  
  15. public partial class user
  16. {
  17. public int id { get; set; }
  18. public string name { get; set; }
  19. public string address { get; set; }
  20. public string home { get; set; }
  21.  
  22. public virtual usercontent usercontent { get; set; }
  23. }
  24. }

 6.    运用 C# partical 部分类,添加类特有描述或操作(为了区分自动代码,方便管理)

///EFModel.Designer.cs

  1. // 为模型“D:\C#demo\EFMysqlSample\EFMysqlSample\EFModel.edmx”启用了 T4 代码生成。
  2. // 要启用旧代码生成功能,请将“代码生成策略”设计器属性的值
  3. // 更改为“旧的 ObjectContext”。当在设计器中打开该模型时,此属性会出现在
  4. // “属性”窗口中。
  5.  
  6. // 如果没有生成任何上下文和实体类,可能是因为您创建了空模型但是
  7. // 尚未选择要使用的实体框架版本。要为您的模型生成一个上下文类和实体
  8. // 类,请在设计器中打开该模型,右键单击设计器图面,然后
  9. // 选择“从数据库更新模型...”、“从模型生成数据库...”或“添加代码生成
  10. // 项...”。
  11.  
  12. namespace EFMysqlSample
  13. {
  14. public partial class user
  15. {
  16. public static user CreateUser(int id,string name)
  17. {
  18. user u = new user();
  19. u.id = id;
  20. u.name = name;
  21. return u;
  22. }
  23. }
  24. }

7.     编写操作代码,对数据库相关操作。 

///program.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace EFMysqlSample
  8. {
  9. class Program
  10. {
  11.  
  12. const int MaxRow = ;
  13.  
  14. //增
  15. static void InsertData(user[] us)
  16. {
  17. using (var ctx = new testEntities())
  18. {
  19. foreach (user c in us)
  20. {
  21. ctx.user.Add(c);
  22. }
  23.  
  24. ctx.SaveChanges();
  25. }
  26. }
  27.  
  28. //删
  29. static void DeleteData()
  30. {
  31. using (var ctx = new testEntities())
  32. {
  33. var users = from c in ctx.user select c;
  34. foreach (user c in users)
  35. {
  36. ctx.user.Remove(c);
  37. }
  38.  
  39. ctx.SaveChanges();
  40. }
  41. }
  42.  
  43. //查
  44. static void QueryData()
  45. {
  46. using (var ctx = new testEntities())
  47. {
  48. var users = ctx.user.SqlQuery("SELECT * FROM test.user");
  49. foreach (var p in users)
  50. {
  51. System.Console.WriteLine("{0}+{1}", p.id, p.name);
  52. }
  53. }
  54. }
  55. /// <summary>
  56. /// 原生SQL查询
  57. /// </summary>
  58. /// <param name="args"></param>
  59. static void QueryDataBySql()
  60. {
  61. using (var db=new testEntities())
  62. {
  63. var users = db.user.SqlQuery("select * from test.user where id=8");
  64. foreach(var u in users)
  65. {
  66. System.Console.WriteLine("{0}+{1}", u.id, u.name);
  67. }
  68. }
  69.  
  70. return;
  71. }
  72.  
  73. static void Main(string[] args)
  74. {
  75. user[] cs = new user[MaxRow];
  76. for (int i = ; i <= MaxRow; i++)
  77. {
  78. StringBuilder sb = new StringBuilder();
  79. sb.Append("user i am ");
  80. sb.Append(i);
  81. user c = user.CreateUser(i, sb.ToString());
  82. cs[i - ] = c;
  83. }
  84. Console.WriteLine("=================== TEST START ===================");
  85. DeleteData();
  86. InsertData(cs);
  87. QueryData();
  88.  
  89. System.Console.Read();
  90. }
  91. }
  92. }

EF2:Entity Mysql Sample的更多相关文章

  1. MySQL Cursor

    MySQL Cursor Summary: in this tutorial, you will learn how to use MySQL cursor in stored procedures ...

  2. WCF+EntityFramework+mysql总结

    用WCF+Ef操作Mysql数据库的,现在,写一下经验总结,希望对大家有帮助. 1.需下载并安装MySql Connector Net 6.5.4 2.在ef层和wcf服务层引用dll :Mysql. ...

  3. freeswitch 把SIP注册信息数据库从SQLITE 改为MYSQL的方法

    实际线上应用中,在线注册人数超过4000 ,SQLITE就吃不消了,容易造成锁表,考虑转入MYSQL,查了下官网 超过转入了MYSQL. https://wiki.freeswitch.org/wik ...

  4. Entity Framework 6.0 Tutorials(9):Stored Procedure Mapping

    Code First - Insert, Update, Delete Stored Procedure Mapping: Entity Framework 6 Code-First provides ...

  5. mysql 启动停止脚本 and mysql 迁移 导入和导出

    ####监控脚本 [root@pdb~]# more /opt/VRTS/scripts/mysql_monitor.sh#!/bin/shn=`ps -ef |grep mysql|grep &qu ...

  6. MySQL Connector for .NET 和 EF版本匹配问题

    以下讨论的都是EF5.0, 版本号:4.4.0.0 如果装了MySQL 5.0.1 , 那么最好用MySQL Connector 6.3.6,但是创建数据库后,生成迁移历史表的时候,会报错,你不管,直 ...

  7. 【开源】OSharp3.0框架解说系列:新版本说明及新功能规划预览

    OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...

  8. Java五大框架

    2017-6-13 Lifusen 此文章仅代表个人观点,如有问题提出请联系Q:570429601 1.Hibernate (开放源代码的对象关系映射框架) Hibernate是一个开放源代码的对象关 ...

  9. 【开源】OSharp3.3框架解说系列:重新开源及3.3版本新特性

    OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...

随机推荐

  1. Paper Reading_Computer Architecture

    最近(以及预感接下来的一年)会读很多很多的paper......不如开个帖子记录一下读paper心得 Computer Architecture Last level cache (llc) perf ...

  2. switch使用--查询水果价格案例

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. ab压测

    安装:yum install -y httpd-tools 验证:ab -V ab -help:-n requests 要执行请求总数,默认会执行一个请求 -c concurrency 一次执行多个请 ...

  4. 使ApacheBench支持multi-url

    目录 1.下载Apache httpd相关源码包以及针对ab工具的patch包 2.编译安装apr 3.编译安装apr-util 4.替换httpd源码里面的ab.c文件 5.编译安装httpd 6. ...

  5. jemter简单测试方式

    一.简介 Jmeter是一款优秀的开源测试工具, 是每个资深测试工程师,必须掌握的测试工具,熟练使用Jmeter能大大提高工作效率. **开源,他是一款开源的免费软件,使用它你不需要支付任何费用, * ...

  6. java String源码浅出

    1.public char charAt(int index) 返回指定索引处的 char 值. 源码: =====================String.class============== ...

  7. easyui自学模板代码

    index.jsp源码 <%@ page language="java" contentType="text/html; charset=UTF-8" p ...

  8. js倒计时功能中newData().getTime()在iOS下会报错,显示 nan

    最近在做移动端项目 ,有个设置开始时间和结束时间,然后倒计时 这个活动还有几天.在安卓上能正确转换时间,但在iOS上不能显示,为NaN-NaN1-NaN  Invalid Date, 就好比new D ...

  9. 设计模式Design Pattern(2)--单例模式

    单例顾名思义就是一个实例.类只有唯一一个实例,并提供给全局使用.解决了全局使用的类频繁地创建与销毁带了的消耗. 单例模式常用简单,但细究却又不简单,且往下看. 单例模式又可以分为 (1)懒汉式:需要使 ...

  10. day4 切片,数据类型

    day5: 序列,可以使用切片 序列类型:字符串,列表,元祖 特点:可以通过坐标来取值,坐标从0开始 >>> s = "agfdagsgsdgsa" >&g ...