原文地址:http://www.cnblogs.com/ejiyuan/archive/2012/02/29/2373683.html
EF正在成為一個優秀的ORM架構,4.1中就加入了Code First,當時帶來的不少的驚喜,可是,4.1時,的Code
First雖然可以不再依賴edmx,可是建立很多的,映射code,雖然這些code有工具可以自動產生,可是仍覺得解決方案混亂。今天感受了一下4.3,他可以不在依賴edmx,不再需要大量的映射code,寫簡單的,連接字串,實現一個清爽的,基於POCO的ORM架構。4.3中好多東西都已被內部封裝了我們只需簡單的調用就好:
1,定義資料操作對象
/// <summary>
/// 定義一個DbContext
/// </summary>
public class BookContext : DbContext
{
public BookContext()
: base("conString")
{
}
//定義一個DbSet對象映射到實體
public DbSet<Book> Books
{
get;
set;
}
}
複製代碼
2,定義實體物件
//定義一個實體
public class Book
{
public int BookId { get; set; }
public string Title { get; set; }
public double Price { get; set; }
}
複製代碼
3,修改設定檔,添加一個簡單的連接字串
<connectionStrings>
<add name="conString" connectionString="server=.;uid=sa;pwd=123456;database=promise" providerName="System.Data.SqlClient"/>
</connectionStrings>
複製代碼
4,Test
using (BookContext bc = new BookContext())
{
//查詢
var list = bc.Set<Book>().ToList();
//添加
var obj = new Book() { BookId = 12, Price = 10.1, Title = "其實我是一本書" };
bc.Books.Add(obj);
//提交
bc.SaveChanges();
}
複製代碼
另外4.3中加入了對System.ComponentModel.DataAnnotations的擴充,只需在實體物件類或欄位上加入相應的標記就可以定義或改變一些映射規則,如:
//指定映射到資料庫的Books表中
[System.ComponentModel.DataAnnotations.Table("Books")]
public class Book
{
//指定該為主鍵
[System.ComponentModel.DataAnnotations.Key()]
//指定該欄位不為自動編號
[System.ComponentModel.DataAnnotations.DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None)]
public int BookId { get; set; }
public string Title { get; set; }
public double Price { get; set; }
}
複製代碼
如果你資料中book對應的表主鍵不是自動編號的此標記[System.ComponentModel.DataAnnotations.DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None)]
很重要否則無法update資料,另外其中還有大量的 驗證屬性。