声明 : 数据库是Mysql,本人的程度只到会写sql语句(不会储蓄过程), c# 会基本的ADO.NET数据库访问,LINQ基础.
这篇只做个人学习|温习作用. 新手可以参考,也请高手指正错误, 感恩.
Entity Framework (缩写EF) 是微软的一个框架。作用是处理面向对象与关系数据库的映射问题。
以往我们都是ADO.NET来访问数据库,connection.open() -> sql command -> executenonquery | dataReader -> connection.close()等等
然后在把select结果装入DataTable | List<Class> 等等
写久了你会发现,这样的过程重复性很高,代码也不够整齐直观,很大的原因是关系数据库的思维和面向对象不太吻合造成的。
还有一种糟糕的情况是,每每要替换数据库时,语句有不兼容的问题, 可能需要批量替换.
Entity Framework 能让你在不需要写 sql 语句下,直接访问任何数据库获取资料。
所谓的映射就是把每个sql table 写出一个对应的 Class,column=属性, 然后写出它们之间的关系.这里的关系指的是范式(1对0, 1对1,1对多,多对多)
然后通过操作对象来同步数据库,有点MVC中 model -> view 的概念
这一篇先从安装配置说起吧.
我搞了大半天,没有一个很完整的结果,最终只能用 EF 6.1.1 ,配合 Mysql 5.x Code First 模式(class 和数据表是手写的),做不出 designer page 自动创建等。
我用 visual studio 2012 ultimate , 原先是EF 5.0 ,可以通过 NuGet去下载安装.
因为我用的是MySQL 所以必须安装 connetor/NET 6.9.3 . 下载 http://dev.mysql.com/downloads/connector/net/6.9.html
还有MySQL for visual studio . 下载 http://dev.mysql.com/downloads/windows/visualstudio/1.2.html
安装了之后把 dll copy 进bin里 . 一般在 : C:\Program Files\MySQL\MySQL Connector Net 6.9.3\Assemblies\v4.5\里面的dll file
MySql.Data.dll
MySql.Data.Entity.EF6.dll
MySql.Web.dll
然后配置一下web config
<connectionStrings> <add name="someNameYourLike" providerName="MySql.Data.MySqlClient" connectionString="server=110.100.45.100;database=databaseName;uid=username;password=password;" /> </connectionStrings>
<compilation debug="true" targetFramework="4.5"> <assemblies> <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <add assembly="MySql.Data, Version=6.9.3.0, Culture=neutral, PublicKeyToken=C5687FC88969C44D" /> </assemblies> </compilation>
<entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> <providers> <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" /> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </providers> </entityFramework>
这样就行啦!