EF2:Entity Mysql Sample
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 可以使用。其中
架构图如下:
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="server=192.168.56.228;user id=wspt;password=123456;database=test"" providerName="System.Data.EntityClient" />
</connectionStrings>
注意:(本人使用vs2013,不更新EF的情况下,使用EF5没有问题)如尝试使用EF6,网上众多介绍使用EF6有可能产生版本不对应问题,"您的项目使用最新版实体框架****" ,步骤如下:
1.nuget安装最新版EF
2.引用mysql-connet-net安装目录中众dll(其中包含ef6.dll)
3.在项目app.config中 provices节点添加
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
3)Sample
- 创建一个工程EFMysqlSample02
2. 在项目工程里添加(数据/ADO.Net实体数据模式)
3. EF模型:从数据库生成/新建连接(选定数据源和连接信息)
4. 选择表,命名,生成.edmx文件
5. 生成 contenxt实体类(数据库操作类),表实体类。
///EFModel.Context.tt/EFModel.Context.cs
namespace EFMysqlSample02
{
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure; public partial class testEntities : DbContext
{
public testEntities()
: base("name=testEntities")
{
} protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
} public DbSet<user> users { get; set; }
}
}
///EFModel.tt/user.cs
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码是根据模板生成的。
//
// 手动更改此文件可能会导致应用程序中发生异常行为。
// 如果重新生成代码,则将覆盖对此文件的手动更改。
// </auto-generated>
//------------------------------------------------------------------------------ namespace EFMysqlSample
{
using System;
using System.Collections.Generic; public partial class user
{
public int id { get; set; }
public string name { get; set; }
public string address { get; set; }
public string home { get; set; } public virtual usercontent usercontent { get; set; }
}
}
6. 运用 C# partical 部分类,添加类特有描述或操作(为了区分自动代码,方便管理)
///EFModel.Designer.cs
// 为模型“D:\C#demo\EFMysqlSample\EFMysqlSample\EFModel.edmx”启用了 T4 代码生成。
// 要启用旧代码生成功能,请将“代码生成策略”设计器属性的值
// 更改为“旧的 ObjectContext”。当在设计器中打开该模型时,此属性会出现在
// “属性”窗口中。 // 如果没有生成任何上下文和实体类,可能是因为您创建了空模型但是
// 尚未选择要使用的实体框架版本。要为您的模型生成一个上下文类和实体
// 类,请在设计器中打开该模型,右键单击设计器图面,然后
// 选择“从数据库更新模型...”、“从模型生成数据库...”或“添加代码生成
// 项...”。 namespace EFMysqlSample
{
public partial class user
{
public static user CreateUser(int id,string name)
{
user u = new user();
u.id = id;
u.name = name;
return u;
}
}
}
7. 编写操作代码,对数据库相关操作。
///program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace EFMysqlSample
{
class Program
{ const int MaxRow = ; //增
static void InsertData(user[] us)
{
using (var ctx = new testEntities())
{
foreach (user c in us)
{
ctx.user.Add(c);
} ctx.SaveChanges();
}
} //删
static void DeleteData()
{
using (var ctx = new testEntities())
{
var users = from c in ctx.user select c;
foreach (user c in users)
{
ctx.user.Remove(c);
} ctx.SaveChanges();
}
} //查
static void QueryData()
{
using (var ctx = new testEntities())
{
var users = ctx.user.SqlQuery("SELECT * FROM test.user");
foreach (var p in users)
{
System.Console.WriteLine("{0}+{1}", p.id, p.name);
}
}
}
/// <summary>
/// 原生SQL查询
/// </summary>
/// <param name="args"></param>
static void QueryDataBySql()
{
using (var db=new testEntities())
{
var users = db.user.SqlQuery("select * from test.user where id=8");
foreach(var u in users)
{
System.Console.WriteLine("{0}+{1}", u.id, u.name);
}
} return;
} static void Main(string[] args)
{
user[] cs = new user[MaxRow];
for (int i = ; i <= MaxRow; i++)
{
StringBuilder sb = new StringBuilder();
sb.Append("user i am ");
sb.Append(i);
user c = user.CreateUser(i, sb.ToString());
cs[i - ] = c;
}
Console.WriteLine("=================== TEST START ===================");
DeleteData();
InsertData(cs);
QueryData(); System.Console.Read();
}
}
}
EF2:Entity Mysql Sample的更多相关文章
- MySQL Cursor
MySQL Cursor Summary: in this tutorial, you will learn how to use MySQL cursor in stored procedures ...
- WCF+EntityFramework+mysql总结
用WCF+Ef操作Mysql数据库的,现在,写一下经验总结,希望对大家有帮助. 1.需下载并安装MySql Connector Net 6.5.4 2.在ef层和wcf服务层引用dll :Mysql. ...
- freeswitch 把SIP注册信息数据库从SQLITE 改为MYSQL的方法
实际线上应用中,在线注册人数超过4000 ,SQLITE就吃不消了,容易造成锁表,考虑转入MYSQL,查了下官网 超过转入了MYSQL. https://wiki.freeswitch.org/wik ...
- Entity Framework 6.0 Tutorials(9):Stored Procedure Mapping
Code First - Insert, Update, Delete Stored Procedure Mapping: Entity Framework 6 Code-First provides ...
- mysql 启动停止脚本 and mysql 迁移 导入和导出
####监控脚本 [root@pdb~]# more /opt/VRTS/scripts/mysql_monitor.sh#!/bin/shn=`ps -ef |grep mysql|grep &qu ...
- MySQL Connector for .NET 和 EF版本匹配问题
以下讨论的都是EF5.0, 版本号:4.4.0.0 如果装了MySQL 5.0.1 , 那么最好用MySQL Connector 6.3.6,但是创建数据库后,生成迁移历史表的时候,会报错,你不管,直 ...
- 【开源】OSharp3.0框架解说系列:新版本说明及新功能规划预览
OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...
- Java五大框架
2017-6-13 Lifusen 此文章仅代表个人观点,如有问题提出请联系Q:570429601 1.Hibernate (开放源代码的对象关系映射框架) Hibernate是一个开放源代码的对象关 ...
- 【开源】OSharp3.3框架解说系列:重新开源及3.3版本新特性
OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...
随机推荐
- 使用 ref 和 out 传递数组注意事项
1.与所有的 out参数一样,在使用数组类型的 out 参数前必须先为其赋值,即必须由被调用方为其赋值 示例 :在此例中,在调用方(Main 方法)中声明数组 theArray,并在 FillArra ...
- es6 async和await
es7 async和await ,作为genertor函数语法糖,在使用上比generator函数方便的,Generator 函数就是一个封装的异步任务,或者说是异步任务的容器.异步操作需要暂停的地方 ...
- VSCode配置 Debugger for Chrome插件
Debugger for Chrome这个插件是直接在vscode里面进行调试js文件,跟谷歌的控制台是一样的功能,下载了它就不用打开浏览器的控制台就能进行打断点. 首先在左侧扩展栏找到这个插件下载好 ...
- 2019 蓝桥杯国赛 B 组模拟赛 D. 程序设计:公约数
蒜头君有n个数,他想要从中选出k个数,使得它们的最大公约数最大.请你求出这个最大的最大公约数. 输入格式第一行输入两个整数 .第二行输入 个整数 . 输出格式输出一个整数. 数据范围 样例输入14 3 ...
- JVM GC Roots
如何确定一个堆中的对象是否死去? 两个思路: 1.引用计数法 给每个对象添加一个引用,用来统计指向该对象的引用计数.有引用时就加1,引用失效时就减1.任何时候引用计数为0,该对象就死亡了.可以被当做垃 ...
- Pycharm中Matplotlib图像不在弹出独立的显示窗口
File | Settings | Tools | Python Scientific | Show plots in toolwindow 如图, 取消勾选此时,在执行就会在独立的窗口中弹出Matp ...
- 如何删除Github上的仓库
1.首先,进入自己的github账户页面,点击头像选择下面的Your repositorys,点击进入 2.进入以后选中自己要删除的仓库,点击进去该仓库界面 3.找到Settings按钮,点击进入 4 ...
- Vscode中解决Html文件中不能打断点问题
Vscode中解决Html文件中不能打断点问题: 默认情况下,VSCode是不能在Html文件里打断点的,但是可以修改设置,依次打开:文件->首选项->设置,然后功能->调试-> ...
- css多种方式实现双飞翼布局
圣杯布局.双飞翼布局效果图 从效果图来看圣杯布局.双飞翼布局效果是一样一样的.圣杯布局.双飞翼布局就是左右两侧宽度固定,中间内容宽度自适应,即100% 圣杯布局 <style> *{ ma ...
- html2canvas 把h5网页保存为图片 区域保存
html2canvas 把h5网页保存为图片 想把一个网页得某些元素,绘制成图片保存,有些数据是接口动态加载的,所以不能UI给到图片,需要我们把api的数据也绘制到图片上 html2canvas这个插 ...