上一篇介紹了《創建實體》,這一篇我們順其自然地介紹《創建DbContext》。
溫故:
提到DbContext,對於經常使用DbFirst模式的開發者來說已經再熟悉不過了,EntityFramework全靠這員大將。它的作用是代表與數據庫連接的會話,提供了查詢、狀態跟蹤、保存等功能。
還有一個重要的對象是DbSet,對實體類型提供了集合操作,比如Add、Attach、Remove。繼承了DbQuery,所以可以提供查詢功能。
知新:
ABP框架為我們創建了一個DbContext模板。這個模板就是我項目中基礎設施層的ChargeStationDbContext.cs文件(當然,如果你的項目名稱是XX,那么它的名字就是XXDbContext.cs),如下圖:
開干:
雙擊打開這個文件開始編輯。
打開文件之后,發現有個todo提示,這個提示告訴我們“為你的實體們定義IDbset”。好,接下來,我們就在這個地方來定義以下代碼。
public virtual IDbSet<Cities> Cities { set; get; } public virtual IDbSet<CoinsCollectionDataLogs> CoinsCollectionDataLogs { set; get; } public virtual IDbSet<DeviceCoinsRecords> DeviceCoinsRecords { set; get; } public virtual IDbSet<DeviceNoDataSets> DeviceNoDataSets { set; get; } public virtual IDbSet<MoneyBoxRecycleRecords> MoneyBoxRecycleRecord { set; get; } public virtual IDbSet<MonthEndReports> MonthEndReports { set; get; } public virtual IDbSet<Operators> Operators { set; get; } public virtual IDbSet<Orders> Orders { set; get; } public virtual IDbSet<Provinces> Provinces { set; get; } public virtual IDbSet<RefundOrders> RefundOrders { set; get; } public virtual IDbSet<Stations> Stations { set; get; } public virtual IDbSet<TerminalAlertLogs> TerminalAlertLogs { set; get; } public virtual IDbSet<TerminalDevices> TerminalDevices { set; get; } public virtual IDbSet<TerminalMaintainLogs> TerminalMaintainLogs { set; get; } public virtual IDbSet<TransDetails> TransDetails { set; get; }
再次注意一下這里的提示“為你的實體們定義IDbset”,因為我的實體中還定義了Abp開頭的一些Users和Roles等等,所以我在這里繼續定義它們的IDbSet。定義之后,發
現報錯,原話是這樣的:“The key word ‘new’is required on ‘Roles’because it hides property IDbSet<TRole> AbpZeroDbContext<TTenant, TRole, TU
ser>”,翻譯成人話就是說“父類中已經有這個屬性了,如果你還要定義的話,就必須加一個new關鍵字來隱藏父類的同名屬性”。可見,父類中已經定義了關於租戶,用戶和
角色等的屬性,那么我們直接用就好了。來看看ABP module-Zero中的源碼:
ABP已經幫我們做了這么多,這就是它強大之所在啊。因而,推斷出這里我們不用再定義這些東西的IDbSet了,只需定義自己業務的實體,相應地,之前(上一篇)創建的這些實體也應該刪除了。
好了,這里我們定義完了IDbSet,那么AbpZeroDbContext是怎么連接到數據庫的呢?它的連接字符串在哪呢?
注意看該類的構造函數,它調用了父類的構造函數,並且將“Default”字符串傳給父類的構造函數。實際上,這個字符串一直從AbpZeroDbContext類傳給其父類AbpContext,再向上傳給父類DbContex,用於數據庫的連接使用。最后通過讀取Web.Config中name屬性的值為“Default”的連接字符串來連接數據庫。
<connectionStrings> <add name="Default" connectionString="Server=localhost; Database=ChargeStation; Trusted_Connection=True;" providerName="System.Data.SqlClient" /> </connectionStrings>
好了,今天的《創建DbContext》就說到這里,肚子餓了,該去做午飯了!下一篇我們聊《創建數據庫遷移》,讓我們一小步一小步地揭開ABP框架的神秘面紗,敬請關注!