Entity Framework Feature CTP 4 更新了 Code First 编程模型并提升了生产率

阅读数:1904 2010 年 7 月 16 日

话题:.NETDevOps语言 & 开发架构

近日,Entity Framework Feature CTP 4发布了,更新了 Code First 编程模型,增加了新的编码约定与数据注解,同时还新增了两个类型:DbContext 与 DbSet<TEntity>,可以使用 Code First 简化实体模型的创建。

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<TEntity>。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 4 RTM 的发布时间,只是说“我们正努力工作以期早日发布 RTM”。

相关信息:ADO.NET EF CTP 4EF CTP4 Walkthrough:Code FirstConventions for Code FirstProductivity Improvements for the Entity FrameworkEF CTP4 Walkthrough:Productivity Improvements

查看英文原文:EF CTP 4 Brings Code First Updates and Productivity Improvements