BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 Abel Avram 关注 7 他的粉丝 ,译者 张龙 关注 12 他的粉丝 发布于 2010年7月17日. 估计阅读时间: 7 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

有点晕 by 阿 不

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

Re: 有点晕 by 龙 张

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

版本变化 by Shichao Liu

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

Re: 版本变化 by Cui henllyee

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

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

4 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT