日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】ABP源码分析二十七:ABP.Entity Framework

發布時間:2023/12/10 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】ABP源码分析二十七:ABP.Entity Framework 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

IRepository:接口定義了Repository常見的方法

AbpRepositoryBase:實現了IRepository接口的常見方法

?

EfRepositoryBase:實現了AbpRepositoryBase中定義的抽象方法:GetAll,Insert,Delete,Update。在實際項目中的RepositoryBase都是從EfRepositoryBase繼承的

?

?

IDbContextProvider/UnitOfWorkDbContextProvider:通過從ICurrentUnitOfWorkProvider對象的current屬性中獲取DBContext. 這個current屬性就是IUnitOfWork對象,具體到這筆就是EfUnitOfWork。

?

EfUnitOfWork:繼承自UnitOfWorkBase,結合EF的DBContext實現事務功能。同時DBContext是在這個對象中創建的,而且只從這個對象創建。其他需要DBContext的對象都是通過IDbContextProvider對象來獲取的。為什么EfUnitOfWork創建的DBContext實例變量可以通過IDbContextProvider對象獲取到呢?原因和UnitOfWork的實現過程有關。 在UnitOfWork中介紹過說有實現了IRespository接口的類都被加上了UOW攔截器,而UOW攔截器在攔截的時候會先創建EfUnitOfWork并將其放入ICurrentUnitOfWorkProvider對象中,通過ICurrentUnitOfWorkProvider對象的current屬性就可以獲取到EfUnitOfWork對象。進而得到DBContext。

?

?

EntityFrameworkConventionalRegistrar:注冊所有以AbpDbContext為基類的類,并設置其構造函數中的一個參數nameOrConnectionString的值。

AbpEntityFrameworkModule:完成EF module的注冊,首先將EntityFrameworkConventionalRegistrar加到ABP的ConventionalRegistrar列表中,接著register UnitOfWorkDbContextProvider.

最后最關鍵的一步操作:調用EntityFrameworkGenericRepositoryRegistrar的RegisterForDbContext方法為每個DBContext中的entity通過反射創建一個EfRepositoryBase<entity>的類,并注入到容器中。這是ABP中值得贊的地方,帶來了很多便利。比如有一個person的entity。對于倉儲類,IRepository、EfRepositoryBase定義和實現的許多方法已足已應付一般的需要。如果這些方對于實體person來說已足夠,我們便不需要再去創建這個實體所需的倉儲接口/類,直接使用EfRepositoryBase<person>就可以了。我們需要做的就是把EfRepositoryBase<person>注入到容器中就可以了。 接著在需要使用person倉儲類的地方,定義一個IRepository<person>對象就可以了。而使用ABP框架,你無需手動的register這個EfRepositoryBase<person>類到容器里,ABP會自動注入其通過EntityFrameworkGenericRepositoryRegistrar的RegisterForDbContext方法自動生成并register這樣的類型。

AutoRepositoryTypesAttribute:通過給自定義的DbContext標注AutoRepositoryTypes特性,可以指定自定義的倉儲類。默認是register EfRepositoryBase<entity>的類到容器,通過特性可以register **RepositoryBase<entity>的類到容器。

?

?

?

返回ABP源碼分析系列文章目錄

總結

以上是生活随笔為你收集整理的【转】ABP源码分析二十七:ABP.Entity Framework的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。