昨天寫的這篇博客因為下班時間到了忘記保存了,好郁悶,得重新寫一遍。實習所在公司使用的是CodeFirst開發模式,最近開始參與到公司的項目里面來了,發現這個模式特別好用,建庫建表改變字段屬性添加刪除字段等等操作都無需自己在數據庫動手操作,只需要編寫代碼即可實現,着實是方便了許多。今天來記錄一下如何使用CodeFirst開發模式,閑言少敘,下面進入正題。
(一)准備工作
新建三個項目,其中一個為MVC項目(Console),另外兩個為類庫項目(Moel和ORM),三者用途如下:
Console:這個就不說了;
Model:這個項目里專門書寫數據實體類;
ORM:這個項目用來創建上下文,構建數據庫與實體類之間的映射關系;
如下圖所示:
(二)在Model中添加實體類User.cs
代碼如下:
namespace Model { [Table("Sys_User")] //自動建表的表名
public class User { /// <summary>
/// 主鍵 /// </summary>
[Key] public Guid Id { get; set;} /// <summary>
/// 登錄名 /// </summary>
[Required] //必填項(非空)
[MaxLength(50)] //最大長度(50)
public string LoginName { get; set;} /// <summary>
/// 密碼 /// </summary>
[Required] [MaxLength(50)] public string Password { get; set; } /// <summary>
/// 性別 /// </summary>
[Required] public bool Gender { set; get; } /// <summary>
/// 是否啟用 /// </summary>
[Required] public bool IsEnable { get; set; } /// <summary>
/// 真實姓名 /// </summary>
[MaxLength(50)] public string RealName { get; set; } [MaxLength(300)] public string Remark { get; set; } /// <summary>
/// 創建時間 /// </summary>
public DateTime CreateTime { get; set; } } }
(三)在ORM中書寫上下文,建立映射關系
1.在ORM中利用Nuget工具添加EF包:
2.新建類文件,添加如下代碼:
namespace ORM { public class MyDbContext : DbContext { public MyDbContext() : base(GetConnectionString()) { } private static string GetConnectionString() { return "SqlServerConnectionString"; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); } public DbSet<User> Users { get; set; }//建立實體類與表的映射關系 } }
上面的構造函數public MyDbContext():base("XXX"){},這個xxx位置填寫的是你在配置文件里配置數據庫鏈接的鏈接名,上面代碼我寫的是 SqlServerConnectionString。
(四)在配置文件中配置數據庫連接字符串 SqlServerConnectionString
首先,同樣要用nuget工具將EF添加到 Console中,然后,在代碼中如下位置添加連接字符串:
需要注意的是:
<connectionStrings> 加到<configSections></configSections>的后面,不要加到前面去了,否則可能會出問題哦!
代碼如下:
<connectionStrings>
<add name="SqlServerConnectString" providerName="System.Data.SqlClient" connectionString="Server=localhost;Database=CodeFirstDb;Integrated Security=False;User ID=sa;Password=168168;" /
</connectionStrings>
連接字符串里的內容就不多說了,這里的數據庫也會自動生成,不用自己手動去建庫。
配置完ConnectionString后,記得要把System.Configuration這個引用添加到ORM項目中。
(五)數據遷移Migration (將Model的修改應用到數據庫中,且不會改變對應的表中的原始數據)
在ORM項目中,打開nuget管理工具的控制台模式
然后輸入指令:Enable-Migrations(注意:migrations,后面有個s,不要寫掉了):
完成此步后,我們可以看到,ORM中多了一個文件夾,里面有如下的內容:
下面對Configuration.cs里的內容進行更改:
改動點見上圖。
(六)在Application_Start事件中初始化數據庫策略
打開Console中的global.aspx文件,找到Application_Start事件,添加如下代碼:
//當提供了初始化數據時,使用該形式,以初始化數據庫策略並填充一些數據(當某個Model改變了,就刪除原來的數據庫創建新的數據庫)
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDbContext,ORM.Migrations.Configuration>());
如下圖所示:
(七)在Console新建控制器,實現一個對User表的簡單應用
前面6步做好了,就基本大功告成了,下面驗證一下,有沒有自動生成數據庫。
在控制器中添加控制器,直接選自動生成增刪改查功能的模板,如下所示:
這樣就自動生成了一些關於User的功能,我們打開這一頁面,可以看到:
這里的一組數據是我加上去的,如果是首次運行,這里沒有數據,只會顯示這一排字段。
下面看一下我的數據庫
這個數據庫已經生成了,要知道我之前是並沒有建這個庫和表的。
下面,我將User.cs中的Remark實體刪除,看看數據庫中有何變化:
然后再次運行程序:
結果是這樣的:
哦。。。。哦。。尷尬了啊,他禁止了我的數據遷移,說因為這會造成數據丟失,怎么辦呢。好辦,只需要在ORM下的Configuration.cs中添加如下代碼即可解決:
// 自動遷移時如果引起數據丟失是否可接受
AutomaticMigrationDataLossAllowed = true;
看圖:
然后我再運行一下代碼:
再查看數據庫:
看數據庫,我們的Remark字段已經不見了。
因為缺少這個字段,所以在進行增刪改查功能是會出錯:
這是由於我們原來生成的View中有這個字段,現在實體類里這個字段刪除了,而view頁面中沒刪除造成的,只需要自己去把與Remark相關的字段刪除就可以正常運行的。
下面,我再把這個Remark字段加上去,看看結果。
結果為:
看看數據庫:
關於其他的新建表,添加字段等等功能,都是適用的,這里我就再一 一演示了。
好了,這篇就寫到這里了哦,希望能幫到你!加油!
大佬看到了 ,也希望指點一下,感激不盡!