数据访谒ef code first

时间:2022-02-27 06:07:24

  我相信很多博友和我一样都有这种“选择困难症”,我曾经有,此刻也有,这是技术人的一个通病——总想用“更完美”的方法去实现,导致在技术选择上踌躇未定,或总是推翻别人的技术路线,甚至屡屡推翻本身畴前的想法,这种专研的精神当然不错,但跟着春秋的增大,会发明这种习惯已将本身弄得很累,其实真没有须要。我感受技术上永远没有“完美”的解决方案,如果揪着错误谬误去对照和选择,不管最终选择了什么,以后城市后悔。因为你总是看到它身上的错误谬误。orm的框架也有很多,大家都说entityframework性能有点差,它生成的sql语句的确看不下去,我也考虑过dapper,但它要写一些sql语句,这不是我想干的事(纯属小我私家代码气势派头偏好)。分享下为什么会选择ef。我的orm框架的要求是这样的:1、简单快速上手(因为我不太想将太多的精力花在这上面,而ef各要领的资料还是很全的);2、性能只要过得去就行(又不是要开发对性能要求很苛刻的产品,我想微软的产品也不至于性能很低吧);3、后面如果要换数据库,最好不要改代码(这点是我喜欢ef的主要原因,只要将数据连接换一下,dll包换一下,数据库就可以从mysql,sqlserver,oracle任意切换)

 为什么用code first?

  1、代码简洁

    对比db first,,code first的代码更简洁,根基所有的代码都是真正需要的。而db first有很多自动生成的帮助型的代码。

  2、编写简单

    db first在sqlserver下也简单,但如果是mysql或是oracle,在vs的配置上就会遇到很多问题,我初学时经常遇到vs连mysql掉败,或是连接告成后总是生成代码时掉败。而用code first,你只要写实体的代码就行,虽然是”多写了一些代码“,但其实速度上比db first还是快的。

参考资料

  保举:

  微软官方:https://msdn.microsoft.com/en-us/library/aa937723(v=vs.113).aspx

下面介绍如何实用

用法和法式

引用相关包

  如果是sqlserver数据库,只要引用entityframework就行

  如果是mysql数据库,引用mysql.data.entity包(依赖mysql.data包)

    注意:在实际开发中发明有些版本的mysql.data.entity包是有bug的,如版本6.10.5,建议安置6.9.10(测试没有问题)

  如果是oracle数据库,引用oracle.managedDataAccess.EntityFramework包(依赖Oracle.ManagedDataAccess包)

    oracle注意:微软也出过oracle的连接库,但不撑持ef,此刻都倡导用oracle出的odp.net技术。而odp.net以前的版本是基于oracle.dataaccess.dll的,这个有x86和x64位之分,开发时很未便利,建议用oracle.managedDataAccess.dll.

  引用包后,会在web.config里自动生成如下相应的配置信息:

  1)在configuration--》configSections节点下面生成名为entityFramework的section

    <section type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />

  2)

编写实体类

  如下代码

using System; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace webapi.Entities { [Table("Test")] public class TestTable { [Key,Column(TypeName = "varchar"),MaxLength(50)] public string Id { set; get; } [Column(TypeName = "int")] public int? Age { set; get; } [Column(TypeName = "datetime")] public DateTime? CreateDateTime { get; set; } } }

  实体通过dataannotations的方法描述在数据库里类型,长度、主键等。没有须要死记他们的写法,不会时参考就行。

 编写数据库上下文

  1)创建担任自DbContext的类

using System.Data.Entity; namespace webapi.Entities { public class DB : DbContext { /// <summary> /// name=DBConnection,DBConnection为数据库连接的名字,即web.config配置文件节点connectionStrings,name值为DBConnection的数据库连接字符串 /// </summary> public DB() : base("name=DBConnection") { } #region 配置所有的数据库表 public DbSet<TestTable> TestTables { set; get; } #endregion } }

  2)在web.config里配置数据库连接字符串

  由于数据库连接字符串对照重要,为便利,在实际的开发中经常单独配置在一个文件里,然后在web.config里去引用配置文件。

  创建ConnectionStrings.config文件,内容如下

<?xml version="1.0" encoding="utf-8"?> <connectionStrings> <!--sqlserver连接字符串--> <!--<add providerName="System.Data.SqlClient" connectionString="Data Source = localhost; Initial Catalog = WebApiFramework; User Id = sa; Password = 1" />--> <!--mysql连接字符串--> <add providerName="MySql.Data.MySqlClient" connectionString="Data Source=localhost;Initial Catalog=webapi;User id=root;Password=root;charset=utf8;port=3306;" /> <!--oracle连接字符串--> <!--<add providerName="Oracle.ManagedDataAccess.Client" connectionString="Data Source=localhost;User Id=system;Password=root;" />--> </connectionStrings>

  上面将常用的数据库的连接方法举例出来,以后要换数据库,只要按一下数据库的连接字符串就行。

编写测试接口

  code first的基原来法就上面三步了。我们来测试下是否正常。

  1)创建测试接口,代码如下: