InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

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

作者 Abel Avram 译者 张龙 发布于 2010年7月16日

领域
运维 & 基础架构,
架构 & 设计,
语言 & 开发
主题
ADO.NET实体框架 ,
ADO.NET ,
.NET ,
持久性 ,
数据访问 ,
数据库 ,
编程

近日,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

译者 张龙 热衷于编程,乐于分享,对新技术有强烈的探索欲,对Java轻量级框架有一定研究。

有点晕 发表人 阿 不 发表于
Re: 有点晕 发表人 张 龙 发表于
版本变化 发表人 Shichao Liu 发表于
Re: 版本变化 发表人 Cui henllyee 发表于
  1. 返回顶部

    有点晕

    发表人 阿 不

    这个是 Entity Framework Feature CTP ,不是Entity Framework。前两天看到也有点晕

  2. 返回顶部

    Re: 有点晕

    发表人 张 龙

    赞,ef去年就发布了,这个确实是entity framework feature,已改正,多谢。。

  3. 返回顶部

    版本变化

    发表人 Shichao Liu

    不知道版本变化引入的冲突是如何解决的, 比如新版增减了一个字段.

  4. 返回顶部

    Re: 版本变化

    发表人 Cui henllyee

    1.可以手动调整数据库部分
    2.可以通过DataBase.SetInitializer()方法来设置每次model改变去更新数据库