Soma的博客中文版

Somasegar's WebLog - 原文地址http://blogs.msdn.com/somasegar
随笔 - 126, 评论 - 145, 引用 - 3

导航

关于

Soma是微软全球副总裁,负责微软公司Developer Division的工作。 微软DevDiv上海团队将Soma的网络日志翻译为中文,在这里与大家分享.

每月存档

最新留言

广告

 

[原文发表地址]:Entity Framework in .NET 4
[原文发表时间]:Monday, January 11, 2010 9:26 PM

自从Entity FrameworkEF)第一版本的发布以来,我们陆续从用户那里得到了许多高质量的反馈。根据这些反馈,在.NET 4中,我们为Entity Framework添加了许多新的功能和改进,下面我们就来一窥Entity Framework 4中的新特性。

外键支持(Foreign Keys

Entity Framework添加了对外键的支持。利用外键关联,您现在可以将外键属性包含在实体里,这样做可以简化诸如数据绑定、n-tier开发等关键方案的开发。您可以直接使用外键属性设置实体之间的关系:

    using (BlogEntities ctx = new BlogEntities()) {

        Post myPost = new Post {

            PostID = 102,

            PostName = "Post Title",

            CreatedDate = DateTime.Now,

            PostContent = "Post Content",

            BlogID = 11

        };

        ctx.Posts.AddObject(myPost);

        ctx.SaveChanges();

    }

在这个例子里,即使BlogID == 11的这个Blog对象从未被装载,我们也可以直接把新建的myPost对象与这个Blog对象之间的关系通过外键关联起来。

延迟加载支持(Lazy Loading

现在Entity Framework支持延迟加载。一个新的模型在VS2010中被创建的同时,提供延迟加载功能的实体也被生成出来。默认情况下这个功能是开启的,一个查询操作返回的实体对象并不会被马上加载,而是会在实际被使用的时候加载。举例来说,延迟加载意味着下面这个代码段里,每个Post对象会在实际被调用来打印PostName属性的时候被加载。

 

    using (var ctx = new BlogEntities()) { 
        foreach (var b in ctx.Blogs) { 
            Console.WriteLine(b.BlogName); 
            //请注意我们并未主动装载当前blogposts 
            //EF会为我们延迟加载 
            foreach (var p in b.Posts) 
                Console.WriteLine(p.PostName); 
       
    }

简单传统CLR对象(Plain Old CLR Object)支持

EF4为实体提供了简单传统CLR对象(Plain Old CLR Object / POCO)支持。您的实体对象可以独立于EF存在,由此EF更好地支持了测试驱动开发(test-driven development)和领域驱动设计(domain-driven design)。同时,EF仍旧可以帮助跟踪POCO实体的变化,允许延迟加载,也会自动修正对导航属性(navigation properties)和外键的改动。您可以在ADO.NET的博客找到更多关于POCO支持的信息。

文本模板转换工具集(Text Template Transformation Toolkit)代码生成

Entity Framework的初始版本中,您无法随心所欲地配置EF的代码生成,而且代码生成的配置也没有集成到Visual Studio中。新版本的Entity Framework利用文本模板转换工具集(Text Template Transformation Toolkit / T4)不但简化了代码生成的个性化配置,也使得用户对代码生成有更加灵活和强大的控制。Visual Studio集成了这一功能,您可以在Entity Framework设计器的空白处右击,选择“Add Code Generation Item…”。随后您可以获得内置的代码生成模板。

image

当然,您并不局限于这个随着VS2010一起发布的默认代码生成策略,您现在可以编写自己的 T4 模板或者修改默认模板,使之生成您想要的代码。

更好的N层设计(N-Tier支持

我们经常需要分离数据层、业务逻辑层、交互层,来确保数据的完整性并提高每层的可维护性。这时候我们要用到N-Tier设计。Entity Framework小组收到了一些改进N-Tier支持的要求,他们采纳了这一建议,增强了API以支持N-Tier设计。除此之外,EF小组实现了一个代码生成模板,能够生成内置N-Tier特性(如更改追踪)的对象。这个模板生成的实体,本质上是一系列的CLR类,它们带有Windows Communication FoundationWCF)序列化属性,因此它们可以与WCF服务一同使用。

改进SQL语句的生成

我们持续不断地努力改进生成的SQL语句的可读性和性能。在EF4中,针对使用Entity Framework进行的查询,在生成SQL语句的部分我们作出了大量的简化和改进。其中之一是我们去掉了一些多余的join语句。另一个改进是对于WHERE语句的字符串参数使用数据库的通配符。例如下面的LINQ查询语句会被翻译成一个使用WHERE子句和LIKE语句,并使用‘%’通配符在所有的Blogs里搜索BlogName属性‘Visual Studio’开头的Blog

    var query = from b in ctx.Blogs 
                where b.BlogName.StartsWith("Visual Studio"
                select b;   

这些改动看起来好像很小,但改进的SQL生成能够使得查询执行得更快,减轻SQL Servers和网络的负载。

增强对存储过程(Stored Procedure)的支持

许多数据库都利用存储过程来执行自定义的SQL过程。Entity Framework允许您在实体模型中创建一个函数,从中调用一个存储过程。您只需要通过函数导入(Function Import)功能就可以将存储过程导入为一个函数。在新版本中,函数导入功能可以检测到存储过程返回的数据列,并为这些列创建一个复杂类型。当然,当存储过程定义改变后,已有的复杂类型也可以被更新。下面这个截屏显示的是Entity Framework设计器的存储过程向导,引导您一步步将存储过程导入为函数:

image

Entity Framework 4提供的这些新特性,目的是提高程序员的工作效率。您可以在项目论坛上与团队分享您的想法和意见,在Entity Framework团队博客设计博客上与他们联系,也请关注Channel 9上的视频和screencasts

Namaste

打印 | 张贴于 2010-01-14 15:25:13 | Tag:暂无标签

留言反馈

#re:.NET 4中Entity Framework简介 编辑

tiffany jewelry Choose, buy and shop for on sale tiffany jewelry including Tiffany & Co Silver Necklace, Pendants, Bangles, Bracelets, Earrings, Rings and Accessories. tiffany co Tiffany Jewellery offering bangle Jewellery, bracelet jewelry, eardrop jewelry, necklace jewelry, ring jewelry, finger ring jewelry and earring jewelry tiffany tiffany and co links of london links london Tiffany Style Silver Jewelry: Rings, Earrings, Necklaces, Bracelets and more Tiffany Jewellery at low prices.

2010-03-12 20:48:12 | sibat0705
博客主人设置本博客不允许匿名用户发表言论,请登录后再试

Powered by: Joycode.MVC引擎 0.5.2.0