精品国产一级在线观看,国产成人综合久久精品亚洲,免费一级欧美大片在线观看

Entity Framework Core 2.0的突破性變更

責任編輯:editor004

作者:Jonathan Allen

2017-08-30 11:38:45

摘自:INFOQ

與此相關的另一個變更是停止對DbContextFactoryOptions的支持,這個類不適用于設計時上下文的生成。EF Core之前可以支持一個全局的匿名內存數據庫,但現在要求開發人員必須為創建的每一個內存數據庫命名。

在之前的文章里,我們看到了EF Core 2.0的新特性和槽點。今天,我們來看一看EF Core的突破性變更。

不支持EF Core 1.x數據庫驅動器

EF通過數據庫驅動器為SQL Server、MySQL等數據庫生成SQL。EF沒有通用的OleDB或ODBC驅動器,所以只能使用專門為它創建的數據庫驅動器。

為了簡化數據庫驅動器的開發,EF Core更改了驅動器API,不再提供向后兼容的能力。這意味著EF Core 1.0和1.1的驅動器不再受EF Core 2.0的支持,如果要繼續使用它們,必須基于EF Core 2.0的API對它們進行重寫。

根據微軟所述,“SQL Compact、PostgreSQL和MySQL的第三方開源數據庫驅動器正在升級到2.0”。如果使用了其他數據庫,需要自行聯系驅動器開發者。

IDbContextFactory被重命名為IDesignTimeDBContextFactory

IDbContextFactory類不應該被作為DbContext工廠類來使用,雖然它的名字看起來有這個意味。實際上,這個類本應被用在設計工具里,設計工具在生成數據庫遷移腳本時需要用到DbContext對象。

為了避免混淆,IDbContextFactory被標記為“過時”的,設計工具可以改為調用IDesignTimeDBContextFactory。

與此相關的另一個變更是停止對DbContextFactoryOptions的支持,這個類不適用于設計時上下文的生成。

日志和診斷事件的變更

EF Core的日志和診斷事件變更包括:

發送給ILogger的消息事件ID發生了變化。事件ID在整個EF Core里是唯一的,而且消息遵循了MVC所使用的結構化日志標準模式。 日志類別也發生了變化?,F在可以通過DbLoggerCategory訪問到各種日志類別。 DiagnosticSource使用了與相應ILogger消息相同的事件ID。事件內容均為派生自EventData的標準類型。

雖說上面列出的都算得上是突破性的變更,但微軟希望它們不會對現有的應用程序造成太大的影響。

內存數據庫必須指定名字

在進行性能測試時,創建內存數據庫是非常重要的一個輔助手段。雖然這并不能反映應用程序在生產環境的真實行為,但在診斷業務邏輯時還是很有用的。

EF Core之前可以支持一個全局的匿名內存數據庫,但現在要求開發人員必須為創建的每一個內存數據庫命名。不過,同一個內存數據庫仍然可以被多個上下文實例所共享。

只讀API的變更

EF Core停止支持由IProperty接口暴露出來的IsReadOnlyBeforeSave、IsReadOnlyAfterSave和IsStoreGeneratedAlways。它們被IProperty的BeforeSaveBehavior和AfterSaveBehavior所取代。文檔里寫道:

被標記為ValueGenerated.OnAddOrUpdate的屬性默認會忽略當前設定的值。也就是說,不管被追蹤實體的屬性是否發生了變化,比如被設定初始值或者被修改為其他值,它們都只使用store-generated的值。要想讓改變生效,可以通過設置BeforeSaveBehavior或AfterSaveBehavior來實現。

因為添加了新的字段,所以對于IProperty來說,這也算是一個突破性的變更。

ClientSetNull成為默認的刪除行為

之前,EF Core有三種可能的級聯刪除行為:

Cascade:依賴的實體也一并被刪除。這種級聯行為只對被上下文跟蹤到的實體有效。數據庫里也需要設置相應的級聯,確保沒有被上下文跟蹤到的數據也具備同樣的行為。如果你通過EF來創建數據庫,那么EF會為你設置好數據庫的級聯。 Restrict:刪除操作不會作用在依賴實體上,依賴實體保持不變。 SetNull:依賴實體的外鍵被設為null。這種級聯行為只對被上下文跟蹤到的實體有效。數據庫里也需要設置相應的級聯,確保沒有被上下文跟蹤到的數據也具備同樣的行為。如果你通過EF來創建數據庫,那么EF會為你設置好數據庫的級聯。

EF Core 2.0新增了一種默認行為,叫作ClientSetNull。

EF Core 2.0引入了一種叫作ClientSetNull的默認行為。它具有SetNull的語義,兼有Restrict的行為。從我們的經驗來看,對于被跟蹤的實體和數據庫來說,它是最被期待也是最有用的一種行為。

在為被跟蹤的實體設置級聯關系時,DeleteBehavior.Restrict已經成為歷史。

設計時工具包的合并

Microsoft.EntityFrameworkCore.Relational.Design包被棄用,原先的內容被合并到Microsoft.EntityFrameworkCore.Relational和Microsoft.EntityFrameworkCore.Design當中。這樣做的好處是現在可以少引入一個包。

在后續的文章中,我們將會看到EF Core的路線圖。

查看英文原文: Breaking Changes in EF Core 2.0

鏈接已復制,快去分享吧

企業網版權所有?2010-2024 京ICP備09108050號-6京公網安備 11010502049343號

  • <menuitem id="jw4sk"></menuitem>

    1. <form id="jw4sk"><tbody id="jw4sk"><dfn id="jw4sk"></dfn></tbody></form>
      主站蜘蛛池模板: 定远县| 江阴市| 双江| 十堰市| 斗六市| 衡水市| 即墨市| 乌鲁木齐县| 稷山县| 玉屏| 绵阳市| 徐闻县| 牡丹江市| 微博| 桂林市| 蕲春县| 长治县| 吉安县| 卢龙县| 漳州市| 金沙县| 岑溪市| 富宁县| 桐庐县| 望江县| 睢宁县| 虞城县| 桦南县| 汪清县| 卢龙县| 天水市| 阿拉善盟| 浑源县| 邛崃市| 磐安县| 广东省| 沿河| 永济市| 正蓝旗| 五原县| 建昌县|