Abp vNext是Abp的下一代版本,目前還在經一步完善,代碼已經全部重寫了,好的東西保留了下來,去除了很多笨重的東西,從官宣來看,Abp vNext主要是為了以后微服務架構而誕生的。
從源碼來看,Abp vNext已經支持了多種數據庫,Sql Server,MySql,PostgreSql等。默認情況下,你創建的項目使用的是Sql Server版本,如果需要切換到MySql的話,僅需要:
第一步,在你的EntityFrameworkCore(Abp的EF框架模塊,用來創建DbContext,數據遷移用的)中,從NuGet中安裝Volo.Abp.EntifyFrameworkCore.MySql
第二步,打開TGDbContextFactory.cs
第三部,修改代碼:
public TGDbContext CreateDbContext(string[] args)
{
var configuration = BuildConfiguration();
var builder = new DbContextOptionsBuilder<TGDbContext>()
.UseSqlServer(configuration.GetConnectionString("Default"));
return new TGDbContext(builder.Options);
}
改成
public TGDbContext CreateDbContext(string[] args)
{
var configuration = BuildConfiguration();
var builder = new DbContextOptionsBuilder<TGDbContext>()
.UseMySQL(configuration.GetConnectionString("Default"));
return new TGDbContext(builder.Options);
}
原本以為這樣就能ok的,update-database的時候一堆錯誤,去issue上看了下,都有這個問題,有人建議用Pomele的MySql驅動,還提了PR,當我今天(3月9號)去看的時候PR已經通過,但Nuget包還未更新。
自給自足豐衣足食,自己來吧,其實非常簡單
先去掉剛引入的Volo.Abp.EntityFrameworkCore.MySql,然后引入Pomelo.EntityFrameworkCore.MySql,隨后上述代碼改為:
public TGDbContext CreateDbContext(string[] args)
{
var configuration = BuildConfiguration();
var builder = new DbContextOptionsBuilder<TGDbContext>()
.UseMySql(configuration.GetConnectionString("Default"));
return new TGDbContext(builder.Options);
}
ok,簡單改造完成,我們再來update-database,我們的創建順利的完成了。
你以為結束了嗎,幼稚!默認啟動的時候他還是會選擇Sql Server,我們看下代碼,在Web項目下的xxWebModule.cs,xx是你的項目名,這個是我們web的Module文件,我們知道Abp是一個Module加載的框架。在這個項目中同樣引入Pomelo.EntityFrameworkCore.MySql,隨后修改ConfigureDatabaseServices方法,
private void ConfigureDatabaseServices()
{
Configure<AbpDbContextOptions>(options =>
{
options.Configure(context =>
{
if (context.ExistingConnection != null)
{
context.DbContextOptions.UseMySql(context.ExistingConnection);
}
else
{
context.DbContextOptions.UseMySql(context.ConnectionString);
}
});
});
}
改完以上的代碼,你就可以順利啟動Abp vNext for MySql了。
改的不是很優雅,畢竟下一個版本應該會解決這個問題。之前用Abp Core做了小程序並放到了生產環境,啟動慢了點,但是運行什么都比較穩定,開發也比較便捷,看了Abp vNext后,感覺一種小清新,相信在不久之后,我會使用它放到生產環境。其實一些老鳥的話,自己都有自己的框架,說實在的,Abp的好處就在於能夠讓大家有一種統一的快速的開發方式。
PS:陪兒子寫字寫了3個小時,寫1個字發呆5分鍾以上,能理解這種痛苦嗎?
