亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

c# 使用Entity Framework操作Access數據庫的示例

2019-10-29 21:07:08
字體:
來源:轉載
供稿:網友

Entity Framework是C#開發中最常見的ORM工具。默認Entity Framework只提供支持MSSQL的provider factory。但是開發者開源貢獻了對SQLite、MySql以及Access等的支持。

Entity Framework將概念模型中定義的實體和關系映射到數據源,利用實體框架可以將數據源返回的數據具體化為對象;跟蹤對象所做的更改;并發處理;將對象更改傳播到數據源等。今天我們就一起討論如何利用Entity Framework進行查詢、插入、更新和刪除數據。

EF操作使用步驟:1.創建數據庫,建立表。2.先建一個控制臺程序  3.添加ADO.net實體數據模型(AccountEF.edmx),會生成一個edmx和.cs的文件 ,我們點進.cs 的文件可以看到有(上下文,實體)兩部分.具體代碼如下.
edmx文件,用XML編輯器打開時,我們會看到包括: <!-- SSDL content -->存儲模型

c#,Entity,Framework,Framework操作數據庫

JetEntityFrameworkProvider

JetEntityFrameworkProvider為Access數據庫文件兼容Entity Framework提供了相應的Provider。在nuget中直接搜索JetEntityFrameworkProvider即可安裝該工具。雖然大多數操作最終是EntityFramework完成因此不需要什么變化,而在數據庫連接等方面還是有些不同和需要注意的地方。

數據庫連接

官方的資源并不多,只提供了一兩個簡單的操作視頻

其中使用的connectionString為在App.config中或Web.config中預定義的以供DbContext實例化時引用。

<connectionStrings>  <add name="DefaultConnection" connectionString="Provider=Microsoft.ACE.OleDb.12.0;Data Source=你的mdb或accdb文件絕對路徑" providerName="JetEntityFrameworkProvider" /></connectionStrings> 

這樣你在實例化自定義的DbContext子類時直接base("name=DefaultConnection")即可建立數據庫連接。

但是我個人不喜歡在配置文件中寫死配置,我更希望使用base(existingConnection, contextOwnsConnection)這種DbContext構造模式,所以需要先直接生成一個DbConnection,這里具體的就是OleDbConnection而不是SqlConnection了。

按照下面的方式直接使用DbProviderFactory創建連接:

var dbConnectionString = "Provider=Microsoft.ACE.OleDb.12.0;Data source=Access文件絕對路徑;Persist Security Info=False"; var conn = DbProviderFactories.GetFactory("JetEntityFrameworkProvider").CreateConnection(); conn.ConnectionString = dbConnectionString; 

Code First或DB First

默認地,JetEntityFrameworkProvider只支持code first模式。即你先寫好模型,然后根據模型生成數據庫。

但是我的需求是用EF讀取已存在的Access數據庫文件,即DB First模式,這時使用EF讀取Access數據庫文件會報錯提示數據表已存在。

通過code first模式的測試發現:

JetEntityFrameworkProvider會創建一個名為__MigrationHistory的表,字段如下:

  1. MigrationId - text格式 
  2. ContextKey - memo格式 
  3. Model - OleObject格式 
  4. ProductVersion - text格式 

MigrationId值的例子為201612281720088_InitialCreate

ContextKey應該是自定義的DbContext類的namespace加類名的格式

Model是二進制的數據無法查看

ProductVersion包含了Entity Framework的版本號和JetEntityFrameworkProvider的版本號

因此我嘗試在EF連接之前用普通SQL query方式插入記錄:

var dbConnectionString = "Provider=Microsoft.ACE.OleDb.12.0;Data source=Access文件絕對路徑;Persist Security Info=False"; conn = new OleDbConnection(dbConnectionString); conn.Open(); var exists = conn.GetSchema("Tables", new string[4] { null, null, "__MigrationHistory", "TABLE" }).Rows.Count > 0;if(!exists)  {   OleDbCommand cmd = new OleDbCommand("CREATE TABLE __MigrationHistory([MigrationId] TEXT, [ContextKey] MEMO, [Model] OleObject, [ProductVersion] TEXT)", conn);   cmd.ExecuteNonQuery();   cmd = new OleDbCommand("INSERT INTO __MigrationHistory(MigrationId, ContextKey, ProductVersion) VALUES('" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + "', '" + typeof(ATOrionContext).Namespace + ".ATOrionContext', '6.1.3-40302')", conn);   cmd.ExecuteNonQuery(); }

執行如上操作后確實能夠利用EF連接已存在模型對應數據表的Access數據庫文件了,但是執行查詢操作仍然會報錯buffer is null

經過Debug發現此buffer指的就是插入記錄的Model字段,我們插入時沒有提供值,因為它是一個二進制數據,內容生成方式未知。

嘗試注釋掉插入記錄的操作,只添加__MigrationHistory表,而結果也令人興奮,可以通過模型驗證并且能夠使用EF進行DB First模式的數據開發模式了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色妞久久福利网| 欧美日韩中文字幕在线视频| 成人黄色中文字幕| 97精品国产97久久久久久| 黄网动漫久久久| 国产一区深夜福利| 亚洲成人av在线播放| 久久久久久久久久国产精品| 国模私拍视频一区| 久久精品视频亚洲| 欧美精品激情在线观看| 日韩av免费在线观看| 精品日本美女福利在线观看| 国产精品久久久久一区二区| 欧美亚洲第一页| 国产精品中文字幕在线观看| 久久久久久久久久久久久久久久久久av| 福利视频导航一区| 欧美电影在线播放| 亚洲精品免费网站| 国产亚洲人成网站在线观看| 中文字幕日韩高清| 日韩av中文字幕在线播放| 成人欧美一区二区三区黑人孕妇| 精品女厕一区二区三区| 久久久久五月天| 2019中文字幕在线| 性色av一区二区三区红粉影视| 成人在线国产精品| 日本不卡免费高清视频| 不用播放器成人网| 91av在线免费观看| 成人在线视频福利| 亚洲中国色老太| 亚洲最大的网站| 久久天堂av综合合色| 久久精品国产亚洲精品2020| www日韩中文字幕在线看| 久久不射电影网| 欧美三级xxx| 国a精品视频大全| 成人天堂噜噜噜| 欧美久久精品一级黑人c片| 97在线日本国产| 欧美野外猛男的大粗鳮| 亚洲人成网站免费播放| 少妇高潮 亚洲精品| 国产精品狠色婷| 神马国产精品影院av| 黄色成人在线免费| 国产精品久久久久久av下载红粉| 中文字幕在线观看日韩| 97在线观看免费| 中日韩美女免费视频网址在线观看| 97碰碰碰免费色视频| 国产精品久久久久久久久久99| 欧美黄色三级网站| 亚洲自拍在线观看| 亚洲free性xxxx护士hd| 欧美在线视频一二三| 中文字幕日韩欧美在线| 国产丝袜一区视频在线观看| 欧美xxxwww| 韩国一区二区电影| 日韩在线播放av| 国产日韩欧美中文在线播放| 日韩av成人在线观看| 国产日产亚洲精品| 夜夜狂射影院欧美极品| 欧美在线视频在线播放完整版免费观看| 国产一区二区三区视频| 成人精品久久一区二区三区| 亚洲日本成人女熟在线观看| 亚洲国产精品网站| 九九热精品视频在线播放| wwwwwwww亚洲| 国内偷自视频区视频综合| 北条麻妃一区二区三区中文字幕| 欧美性做爰毛片| 欧美日韩亚洲一区二区| 欧美另类极品videosbestfree| 欧美激情精品久久久久久久变态| 国产精品视频免费在线观看| 日本久久久久久久久久久| 久久久综合免费视频| 国产亚洲精品日韩| 国产成人精品久久久| 国产亚洲视频中文字幕视频| 丝袜一区二区三区| 国产欧美va欧美va香蕉在线| 粗暴蹂躏中文一区二区三区| 日韩在线观看视频免费| 久久99久久99精品中文字幕| 日韩在线不卡视频| 欧美成人合集magnet| 97免费在线视频| 91高清免费在线观看| 国产精品pans私拍| 日韩经典一区二区三区| 国产精自产拍久久久久久| www欧美日韩| 欧美成人午夜剧场免费观看| 国产一区二中文字幕在线看| 国产精品久久久久7777婷婷| 国产日韩av高清| 国内精久久久久久久久久人| 中文字幕一精品亚洲无线一区| 日韩电影免费在线观看中文字幕| 亚洲精品美女久久久| 亚洲免费人成在线视频观看| 亚洲日本中文字幕| 亚洲国产成人久久综合| 欧美极品少妇与黑人| 国产精品日韩一区| 亚洲aa在线观看| 中文字幕日韩欧美在线视频| 亚洲福利视频网站| 亚洲色无码播放| 日韩在线视频免费观看| 日韩精品视频免费| 热99精品里视频精品| 欧美大片免费观看| 欧美电影在线观看网站| 欧美最猛黑人xxxx黑人猛叫黄| 亚洲第一色中文字幕| 欧美国产日产韩国视频| 欧美在线一区二区三区四| 国产欧美精品一区二区三区介绍| 国产精品美乳在线观看| 欧美在线视频观看免费网站| 国产亚洲欧美日韩精品| 91av网站在线播放| 国产成人鲁鲁免费视频a| 欧美影院久久久| 美日韩精品视频免费看| 国产精品扒开腿爽爽爽视频| 国产精品日韩欧美综合| 亚洲午夜小视频| 久久精品久久久久久国产 免费| 午夜精品久久久久久久99黑人| 国产精品成人一区| 国产精品狼人色视频一区| 欧美成人免费观看| 欧美日韩一区免费| 国产视频欧美视频| 日本中文字幕不卡免费| 日韩va亚洲va欧洲va国产| 日产精品久久久一区二区福利| 最近2019中文字幕第三页视频| 成人做爰www免费看视频网站| 一本大道香蕉久在线播放29| 久久免费在线观看| 一道本无吗dⅴd在线播放一区| 欧美日韩国产123| 色视频www在线播放国产成人| 亚洲aⅴ日韩av电影在线观看| 久操成人在线视频| 国产免费一区二区三区在线能观看| 国产精品久久一区| 国产精品香蕉在线观看| 国产丝袜一区二区| 亚洲成avwww人| 92福利视频午夜1000合集在线观看| 国产99久久久欧美黑人|