[C#.NET][Entity Framework] Code First 初體驗

[C#.NET][Entity Framework]

Entity Framework 目前的版本是6.0.2,Code First 在 EF 4.1版的時候就已經推出,Code First 顧名思義就是先寫 code 來完成資料庫,我們在編寫程式的時候只需要關注邏輯,不用處理資料庫的 schema 定義,EF 還有 Database First | Model First 兩種;在團隊開發裡 Code First 需要有 DBA 的支持,因為它會動到 SQL Schema,若不考慮 DBA ,使用 Code First 是一項不錯的選擇

 

準備工作:

開始之前我們需要準備好我們的開發環境

1.SqlLocalDB

保哥寫了相當詳細的LocalDB強烈建議前往閱讀

http://blog.miniasp.com/post/2012/09/03/SQL-Server-2012-Express-LocalDB-Quick-Start.aspx

http://blog.miniasp.com/post/2012/11/08/Restore-DB-to-the-SQL-Server-LocalDb-instance-using-SSMS.aspx

2.Entity Framewokw

從 NuGet 安裝

image

3.SQL Server Data Tools(SSDT)

VS 2013 預設會安裝,其餘版本需要自行下載安裝

http://msdn.microsoft.com/en-us/data/hh297027

 


體驗開始:

新增一個 class library 專案,名為 CodeFirstModel

@Customer.cs

  1. Products 集合在這裡代表一對多的意思
  2. virtual 代表延遲載入

{
    private ICollection<Product> _products;

    public int Id { get; set; }

    public string Name { get; set; }

    public virtual ICollection<Product> Products
    {
        get
        {
            if (_products == null)
            {
                this._products = new HashSet<Product>();
            }
            return _products;
        }
        set { this._products = value; }
    }
}

 

@Product.cs

  1. [Key] 代表 Primary Key 的意思

{
    [Key]
    public string ISBN { get; set; }

    public string AuthiorName { get; set; }

    public string BookName { get; set; }

    public string Category { get; set; }

    public decimal Price { get; set; }

    public virtual Customer Customer { get; set; }
}

 

PS.更多的 Data Annotations ,請參考以下

http://blogs.msdn.com/b/efdesign/archive/2010/03/30/data-annotations-in-the-entity-framework-and-code-first.aspx

http://msdn.microsoft.com/en-us/data/jj591583.aspx

http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.aspx

 

@CustomerDbContext.cs

最後 CustomerDbContext 是用來展現 Code First 的關鍵,把需要用到的 DTO 類別,用 DbSet 屬性呈現。

DbContext : DbContext
{
    public DbSet<Product> Products { get; set; }

    public DbSet<Customer> Customers { get; set; }

    ~CustomerDbContext()
    {
        this.Dispose();
    }
}

調用測試
新增一個 Winform 的專案,並參考 CodeFirstModel 專案和 NuGet 上的 Entity Framework
1.增加 Data Sources,把資料拖到 UI,並啟用 Save 按鈕
image

 

 

2.資料繫結

    1. 透過 this._dbContext.Customers.Local.ToBindingList(); 把資料綁定給 customerBindingSource
    2. this._dbContext.SaveChanges(); 則是把UI上的操作寫回去給資料庫
    • 
      
      private void Form1_Load(object sender, EventArgs e)
      {
          this._dbContext = new CustomerDbContext();
          this._dbContext.Customers.Load();
      
          this.customerBindingSource.DataSource = this._dbContext.Customers.Local.ToBindingList();
      }
      
      private void customerBindingNavigatorSaveItem_Click(object sender, EventArgs e)
      {
          this.Validate();
          this._dbContext.SaveChanges();
      }

 
按下F5,啥事都還沒做,便可以看到資料庫已經建立在(localdb)\v11.0了,真的很酷。
image
PS1:若沒有帶入 CustomerDbContext 連線字串的情況之下,也就是,Database 的名字規則是 namespace.className。
PS2:DbContext 用完之後要記得調用 Dispose() 方法。

 
在 UI 上新增一筆資料後按下 Save,資料便寫入到 localdb 了。
image

文章出自:http://www.dotblogs.com.tw/yc421206/archive/2014/01/20/141712.aspx

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo