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;
}
}
/// 定義一個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; }
}
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 >
< 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();
}
{
// 查詢
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; }
}
[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數據,另外其中還有大量的 驗證屬性。
附上一個tt代碼生成器,用於從數據庫中初始化實體,VS2010中可以通過NuGet獲取EF最新版本:Install-Package EntityFramework。