昨天寫的這篇博客因為下班時間到了忘記保存了,好鬱悶,得重新寫一遍。實習所在公司使用的是CodeFirst開發模式,最近開始參與到公司的項目裡面來了,發現這個模式特別好用,建庫建表改變欄位屬性添加刪除欄位等等操作都無需自己在資料庫動手操作,只需要編寫代碼即可實現,著實是方便了許多。今天來記錄一下如何使 ...
昨天寫的這篇博客因為下班時間到了忘記保存了,好鬱悶,得重新寫一遍。實習所在公司使用的是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-Migration:
完成此步後,我們可以看到,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欄位加上去,看看結果。
結果為:
看看資料庫:
關於其他的新建表,添加欄位等等功能,都是適用的,這裡我就再一 一演示了。
好了,這篇就寫到這裡了哦,希望能幫到你!加油!
大佬看到了 ,也希望指點一下,感激不盡!