1. 程式人生 > >Asp.net MVC 中 CodeFirst 開發模式例項

Asp.net MVC 中 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欄位加上去,看看結果。

 

結果為:

看看資料庫:

關於其他的新建表,新增欄位等等功能,都是適用的,這裡我就再一 一演示了。

 

好了,這篇就寫到這裡了哦,希望能幫到你!加油!

大佬看到了 ,也希望指點一下,感激不盡!