先日公開されたEntity Framework Feature CTP 4は、新しいコード規則とデータアノテーションによるコードファーストプログラミングモデルを更新し、DbContextとDbSet<TEntity>という2つの新しい型により、コードファーストによるエンティティモデルの組み込みが容易になる。
コードファースト(Code First)
コードファーストプログラミングモデルは、エンティティと関連づけしたクラスのコードを書くことによってモデルを作成する方法である。モデルは、EFによって適切なコード規則が使われている場合とFluent APIが使える場合、または、 データアノテーション属性を使った場合に発見される。データアノテーション属性を使った例は次のようになる。
public class Person {
[Key]
public string SSN { get; set; }
[StringLength(512)]
public string Name { get; set; }
[RelatedTo(RelatedProperty=”Author”)]
public ICollection<Book> Books { get; set; }
}
[Key]
アノテーションは、エンティティのプライマリキーであることを明示するプロパティあり、[StringLength(512)]
は、文字列の最大長を明示するプロパティである。EF CTP 4では、次のデータアノテーションが認められている。Key、StringLength、ConcurrencyCheck、Required、Timestamp、DataMember、RelatedTo、MaxLength、StoreGenerated。
Fluent APIは、コード規約よりも優先されるデータアノテーションよりもさらに優先される。その他のコードファーストに関する重要な更新は以下の通り。
- CTP 4でサポートされている、モデルで認識する規約は、次の通り。プライマリキー、逆方向のリレーションシップ、外部キー、テーブル名の複数形化
- Fluent APIのメソッドは、より直感的に洗練されている。コードファーストウォークスルーで、詳細情報が提供されている。
生産性向上
EF Feature CTP 4は、DbContextとDbSet<TEntity>という2つの新しい型を提供している。DbContextは、ObjectContextの簡易バージョンで、モデルキャッシュ、データベースプロビジョニング、接続管理、スキーマ作成の基本的な機能を提供する。以下の例を見て欲しい。
using System.Collections.Generic;
using System.Data.Entity;
namespace MyDataAccessDemo {
class Program {
static void Main(string[] args){
using (var context = new ProductContext()) {
var food = new Category { CategoryId = "FOOD" };
context.Categories.Add(food);
var cheese = new Product { Name = "Cheese" };
cheese.Category = context.Categories.Find("FOOD");
context.Products.Add(cheese);
context.SaveChanges();
}
}
}
public class ProductContext : DbContext {
public DbSet<Product> Products { get; set; }
public DbSet<Category> Categories { get; set; }
}
public class Product {
public int ProductId { get; set; }
public string Name { get; set; }
public Category Category { get; set; }
}
public class Category{
public string CategoryId { get; set; }
public string Name { get; set; }
public ICollection<Product> Products { get; set; }
}
}
このコードは、データベースにモデルをストアするために必要な基礎を含めて、彼がエンティティモデルを作成するために必要なものが書かれている、
マイクロソフトは、まだEF Feature 4 RTMがいつリリースされるかを明確にしておらず、「私たちはなるべく早くRTMできるように作業を進めています。」と言及するにとどまっている。
関連情報:ADO.NET EF CTP 4、EF CTP4ウォークスルー:コードファースト、コードファーストの規約、Entity Frameworkの生産性向上、EF CTP4ウォークスルー:生産性の向上