c#使用实体框架操作访问数据库的示例

  

实体框架是c#开发中最常见的ORM工具。默认实体框架只提供支持该软件的供应商工厂。但是开发者开源贡献了对SQLite, MySql以及访问等的支持。

  

实体框架将概念模型中定义的实体和关系映射到数据源,利用实体框架可以将数据源返回的数据具体化为对象,跟踪对象所做的更改;并发处理,将对象更改传播到数据源等。今天我们就一起讨论如何利用实体框架进行查询,插入,更新和删除数据。
  

  

EF操作使用步骤:1。创建数据库,建立表。2。先建一个控制台程序,3 .添加ADO.net实体数据模型(AccountEF.edmx),会生成一个edmx和cs的文件,我们点进。cs的文件可以看到有(上下文,实体)两部分。具体代码如下。
  edmx文件,用XML编辑器打开时,我们会看到包括:& lt; !——SSDL内容在存储模型

  

 c #使用实体框架操作访问数据库的示例

  

<强> JetEntityFrameworkProvider
  

  

JetEntityFrameworkProvider为访问数据库文件兼容实体框架提供了相应的提供者。在nuget中直接搜索JetEntityFrameworkProvider即可安装该工具。虽然大多数操作最终是EntityFramework完成因此不需要什么变化,而在数据库连接等方面还是有些不同和需要注意的地方。

  

<强>数据库连接
  

  

官方的资源并不多,只提供了一两个简单的操作视频

  

其中使用的connectionString为在App.config中或web . config中预定义的以供DbContext实例化时引用。

        & lt; connectionStrings>   & lt;添加name=" DefaultConnection " connectionString=疤峁┱?Microsoft.ACE.OleDb.12.0;数据源=你的mdb或accdb文件绝对路径”providerName=" JetEntityFrameworkProvider "/比;   & lt;/connectionStrings>之前      

这样你在实例化自定义的DbContext子类时直接基地(“name=DefaultConnection”)即可建立数据库连接。

  

但是我个人不喜欢在配置文件中写死配置,我更希望使用基地(existingConnection contextOwnsConnection)这种DbContext构造模式,所以需要先直接生成一个DbConnection,这里具体的就是OleDbConnection而不是SqlConnection了。

  

按照下面的方式直接使用DbProviderFactory创建连接:

        var dbConnectionString="提供者=Microsoft.ACE.OleDb.12.0;数据源=访问文件绝对路径;坚持安全信息=False”;   康涅狄格州var=DbProviderFactories.GetFactory (JetEntityFrameworkProvider) .CreateConnection ();   conn.ConnectionString=dbConnectionString;   之前      

<强>代码第一或DB
  

  

默认地,JetEntityFrameworkProvider只支持代码首先模式,即你先写好模型,然后根据模型生成数据库。

  

但是我的需求是用英孚读取已存在的访问数据库文件,即DB第一模式,这时使用英孚读取访问数据库文件会报错提示数据表已存在。

  

通过代码首先模式的测试发现:

  

JetEntityFrameworkProvider会创建一个名为__MigrationHistory的表,字段如下:

  
      <李> MigrationId——文本格式,李   <李> ContextKey -备忘录格式,李   <李>模型——OleObject格式,李   <李> ProductVersion——文本格式,李   
  

MigrationId值的例子为201612281720088 _initialcreate
  

  

ContextKey应该是自定义的DbContext类的命名空间加类名的格式
  

  

模型是二进制的数据无法查看
  

  

ProductVersion包含了实体框架的版本号和JetEntityFrameworkProvider的版本号

  

因此我尝试在EF连接之前用普通SQL查询方式插入记录:

        var dbConnectionString="提供者=Microsoft.ACE.OleDb.12.0;数据源=访问文件绝对路径;坚持安全信息=False”;   康涅狄格州=new OleDbConnection (dbConnectionString);   conn.Open ();   存在var=conn.GetSchema(“表”,新的字符串[4]{空,空,“__MigrationHistory”,“表”}).Rows。数比;0;      如果存在(!)   {   OleDbCommand cmd=new OleDbCommand(“创建表__MigrationHistory (MigrationId文本,ContextKey备忘录,(模型)OleObject [ProductVersion]文本)”康涅狄格州);   cmd.ExecuteNonQuery ();      cmd=new OleDbCommand(“插入__MigrationHistory (MigrationId, ContextKey ProductVersion)值(“" + DateTime.Now.ToString (“yyyyMMddHHmmssfff”) +“”,“”+ typeof (ATOrionContext)。名称空间+”。ATOrionContext”、“6.1.3-40302”)康涅狄格州”);   cmd.ExecuteNonQuery ();      }      

c#使用实体框架操作访问数据库的示例