近日, Entity Framework Feature CTP 4 发布了,更新了 Code First 编程模型,增加了新的编码约定与数据注解,同时还新增了两个类型:DbContext 与 DbSet
Code First
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 的优先级要比数据注解高,而数据注解的优先级要比代码约定高。其他重要的 Code First 更新有:
- CTP 4 中支持的模型探测约定有:主键、关系反转、外键及多元化的表名
- 精化了 Fluent API 方法,直观性更好。 Code First Walkthrough 中包含了更多的细节信息
生产率的提升
EF CTP 4 添加了两个新类型:DbContext 与 DbSet
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 4 RTM 的发布时间,只是说“我们正努力工作以期早日发布 RTM”。
相关信息: ADO.NET EF CTP 4 、 EF CTP4 Walkthrough:Code First 、 Conventions for Code First 、 Productivity Improvements for the Entity Framework 、 EF CTP4 Walkthrough:Productivity Improvements 。
查看英文原文: EF CTP 4 Brings Code First Updates and Productivity Improvements




