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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.Net Core建站(1):EF Core+CodeFirst数据库生成

發布時間:2024/9/21 asp.net 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .Net Core建站(1):EF Core+CodeFirst数据库生成 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

emmm,本來想著用Core做一個小項目玩玩的,然后肯定是要用到數據庫的,

然后想,啊,要不用CodeFirst,感覺很膩害的樣子,于是,一臉天真無邪的我就踏入了一個深不見底的天坑。。。

?

本來想著,應該不是很難,多百度就好,辣么多大神都寫了教程,

零零散散的花了將近三個星期時間,照著Demo寫了N多次的我,不得不放棄了掙扎,

邀請了一位一起工作的大佬,看著他噼里啪啦調試了半個小時之后,就出現的數據庫,莫名心塞,

大佬就是大佬,原諒小弟我才疏學淺,所以做一個筆記先,留著備用。。

?

我會邊寫博客,邊做一個最簡單的Demo,其實很多時候我們缺的,就是這些入門級的東西,

那些加了各種驗證和功能的代碼,反而會影響我們找到需要的代碼。

?

工具:VS2017

環境:.Net Core 2.0 ,EF7

?

首先,我們需要的是建一個解決方案,一個類庫項目,以及一個Web項目

這些建好之后的項目結構,應該是醬紫的

建好之后,就到了一個小關鍵了,我們要添加EF的依賴了,怎么添加呢?

網上看了好多方法,基本是都是使用工具=>NuGet包管理=>程序包管理控制臺,來添加依賴,大概是醬紫:

可以先開著,待會兒用得著,不過我覺著這樣有點麻煩,所以直接寫在項目的工程文件(*.csproj)里面去了,要寫的代碼如下

1 <ItemGroup> 2 <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.0.1" /> 3 <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.1" /> 4 </ItemGroup>

保存之后,Models的EF依賴就已經加入了,怎么知道是否成功呢?看這里,,,

以前是只有一個SDK的,現在多了個NuGet,里面還有倆東西,而且沒有警告啊那些亂七八糟的東西,就表示沒問題了,,

同樣的,我們為WebFront項目,也加上依賴,,這里就不截圖了,,,

走到這一步,我們就應該開始創建數據庫的上下文和數據表了

?創建數據庫的上下文類(DBCodeFirst)和數據表類(DT_User),結構如下

DBCodeFirst的內容如下:

1 public class DBCoreFirst : DbContext 2 { 3 public DBCoreFirst() : base() 4 { 5 6 } 7 8 public DBCoreFirst(DbContextOptions<DBCoreFirst> options) 9 : base(options) 10 { 11 12 } 13 14 override protected void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 15 { 16 base.OnConfiguring(optionsBuilder); 17 } 18 19 #region 數據表 20 21 public DbSet<DT_User> DT_User { get; set; } 22 23 #endregion 24 25 }

DT_User的內容如下:

1 public class DT_User 2 { 3 /// <summary> 4 /// 默認int類型ID為主鍵 5 /// 必須有一個字段為主鍵,不然會報錯 6 /// </summary> 7 public int ID { get; set; } 8 public string UserName { get; set; } 9 }

然后在WebFornt項目的Startup類的ConfigureServices方法中寫一段代碼,連接字符串中的DataBase寫的數據庫名稱是啥,生成的數據庫名稱就是啥,可以和你的上下文類名稱不一致

這時候,我們再來看看數據庫的情況,是沒有DBCodeFirst這個庫的

重頭戲到了,還記得開始打開的程序包管理控制臺么?

打開它,輸入命令,Add-Migration *****(這塊兒隨意)

1 Add-Migration DBCoreFirst

在執行它的時候,我報了好幾個錯,一一列舉出來

第一個報錯

GenericArguments[0], 'Models.Migrations.DBCoreFirst', on 'Microsoft.EntityFrameworkCore.Design.IDesignTimeDbContextFactory`1[TContext]' violates the constraint of type 'TContext'.
genericarguments [ 0 ],”模型。遷移。dbcorefirst ','微軟。entityframeworkcore。設計。idesigntimedbcontextfactory ` 1 [ tcontext ]“違背類型的tcontext約束。

這個報錯的鍋在圖中,我用紅框框起來的地方,默認項目?,對,沒錯,就是它,應該改成WebFonrt,

改好之后,我們繼續執行Add-Migration DBCoreFirst

緊接著,報了第二個錯?

Could not load assembly 'WebFront'. Ensure it is referenced by the startup project 'Models'.未能加載程序集“webfront”。確保它由啟動項目的“Models”引用。

這個報錯的鍋呢,看到我箭頭的尾部了么,在哪里?是Models項目吧,現在這個項目是加粗的,表示它是啟動項目,

更改啟動項目為WebFornt項目,很好,第二個坑被我填了,繼續運行Add-Migration DBCoreFirst

第三個坑接踵而至

Your target project 'WebFront' doesn't match your migrations assembly 'Models'. Either change your target project or change your migrations assembly. 你的目標項目webfront不遷移組件模型匹配”。要么更改目標項目,要么更改遷移程序集。

其實這個坑也不算大,強行往下走也是能生成數據庫的,但是,對我這個強迫癥來說,哪里容得下飄紅??

于是百度,查看了相關資料后,我知道問題出在了哪里,就是箭頭尾部的第28行代碼

services.AddDbContext<DBCoreFirst>(options => options.UseSqlServer(connection)); 改為 services.AddDbContext<DBCoreFirst>(options => options.UseSqlServer(connection, c => c.MigrationsAssembly("WebFront")));

很好,沒有飄紅了,可是,在圖中黃色框中,會對應的生成一些文件,

按我的理解,這些文件不是什么日志文件,就是用來數據表映射的,所以,這些文件應該出現在Models中,而不是WebFront

一系類百度后,,好像沒找著,只能自己點點點,

發現了第四個坑

首先,將代碼還原,

services.AddDbContext<DBCoreFirst>(options => options.UseSqlServer(conStr));不變

然后我們回到第一個坑,將默認項目從“WebFront”改為“Models”

然后執行Add-Migration DBCoreFirst

很穩,現在四個地方都對了,然后我們看看數據庫,這個時候還沒有生成對應的庫

然后我們執行第二段命令Update-DataBase

然后,幸運的我又遇到了第五個坑

GenericArguments[0], 'Models.Migrations.DBCoreFirst', on 'Microsoft.EntityFrameworkCore.Design.IDesignTimeDbContextFactory`1[TContext]' violates the constraint of type 'TContext'.genericarguments [ 0 ],”模型。遷移。dbcorefirst ''微軟。entityframeworkcore。 設計。idesigntimedbcontextfactory ` 1 [ tcontext ]“違背類型的tcontext約束。

?打開一個由命令生成的文件看看

?兩個類的名稱一毛一樣,數據庫又是根據DBCodeFirst這個類來生成的,不出問題就見鬼了,,

那么,左邊的類名為什么會和右邊的一樣??

問題在于我們執行的“Add-Migration DBCoedFirst“命令

Add-Migration DBCodeFirst 改為 Add-Migration DBLog

執行之后的效果,很明顯的變了

緊接著,執行命令“Update-DataBase

然后,我們去數據庫看看

很穩,數據庫生成了,EF會自動生成__EFMigrationsHistory表,好像是用來記錄數據遷移日志的,咱們現在忽略就好

至此,EF7的CodeFirst生成數據庫就完成了,,

自我感覺,寫完這一篇,我打馬賽克的技術也越來越穩了,,,

?

轉載于:https://www.cnblogs.com/Onlooker/p/8047176.html

總結

以上是生活随笔為你收集整理的.Net Core建站(1):EF Core+CodeFirst数据库生成的全部內容,希望文章能夠幫你解決所遇到的問題。

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