Entity Framework 4 的 POCO学习

Entity Framework 4的特性介绍可看这篇文章 .NET 4中Entity Framework简介,其中最感兴趣的一点就是对POCO的支持了:EF4为实体提供了简单传统CLR对象(Plain Old CLR Object / POCO)支持。您的实体对象可以独立于EF存在,由此EF更好地支持了测试驱动开发(test-driven development)和领域驱动设计(domain-driven design)。同时,EF仍旧可以帮助跟踪POCO实体的变化,允许延迟加载,也会自动修正对导航属性(navigation properties)和外键的改动。

Entity Framework 1.0 发布了很长一段时间了,但感觉用的人很少。其中一个很大的原因,也许就是不支持POCO,至少我自己是这么想而不使用EF1的,Entity Framework 4.0版本(又称EF V2)将提供POCO支持,对很多人来说,这是开始使用Entity Framework的时候了。

学习最好的方式当然是动手练习了,今天花了大半天跟着这篇文章【翻译】在Entity Framework 4.0中使用 Repository 和 Unit of Work 模式,这篇文章里头有3篇POCO的系列,虽然文章是写于EF4 beta1的时候,现在已经是RC,一样有效:

POCO in Entity Framework : Part 1 – The Experience(【翻译】实体框架中的POCO支持 - 第一部分 - 体验

POCO in Entity Framework : Part 2 – Complex Types, Deferred Loading and Explicit Loading (【翻译】实体框架中的POCO支持 - 第二部分 - 复杂类型,延迟装载和显式装载

POCO in Entity Framework : Part 3 – Change Tracking with POCO (【翻译】实体框架中的POCO支持 - 第三部分 - POCO的变动跟踪

还有这篇文章EF 4 – Implementing POCO Objects,图文并茂的详细介绍了整个过程。

这里整理一下学习过程中的注意点:

  • 自动生成代码的功能要关掉
  • 继承的ObjectContext的构造函数的参数其实就是指定数据库连接串Connection String
  • 工具生成的Edmx的Connection String的只保存在该程序集的app.config中,记得拷贝到相关的app.config或者web.config
  • 因为没有CSDL和SSDL,所以Edmx中的Model上的Table Name和Column Name务必和你的POCO的名称一致。Entity Framework 4.0 引入了基于约定(convention)的映射,以允许不用显式的修饰,就可将实体类型,属性,复杂类型和关系映射到概念性模型。一个简单的规则是,在你的POCO类中使用的实体类型名称,属性名称,和复杂类型名称必须匹配那些在概念性模型中定义了的相应名称。
  • 代码的单元测试很重要
  • 延迟加载的属性要设置成Virtual, ObjectContext上需要设置 ContextOptions.LazyLoadingEnabled =  true
  • 对于枚举类型的支持是通过复杂类型来实现的,可以参考文章 http://blogs.msdn.com/alexj/archive/2009/06/05/tip-23-how-to-fake-enums-in-ef-4.aspx

Tip 53 – How to debug EF POCO mapping issues : http://blogs.msdn.com/alexj/archive/2010/02/12/tip-53-how-to-debug-ef-poco-mapping-issues.aspx

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏逸鹏说道

AutoMapper 使用实践

一. 使用意图 常常在开发过程中,碰到一个实体上的属性值,要赋值给另外一个相类似实体属性时,且属性有很多的情况。一般不利用工具的话,就要实例化...

372130
来自专栏逸鹏说道

Dapper where Id in的解决方案

简单记一下,一会出去有点事情~ 我们一般写sql都是==》update NoteInfo set NDataStatus=@NDataStatus where ...

290100
来自专栏AI

在Atom中设置Python开发环境

当然,这里有很多很棒的文本编辑器。Sublime Text,Brackets,Atom。我一直都是Atom的粉丝,因为它是完全免费的,它有很多可用的包和主题,使...

45370
来自专栏张善友的专栏

Reactive框架:简化异步及事件驱动编程

NET的Reactive Extensions包含一系列扩展方法和为.NET 4及Silverlight 4中新加入的 IObservable<out T> 和...

22680
来自专栏风口上的猪的文章

.NET面试题系列[1] - .NET框架基础知识(1)

面试出现频率:从来没人问过。事实上我都不知道怎么问,考背书吗?倒是可以问问知不知道现在.NET最新版本是什么,考察面试者是否对新技术足够敏感。

29910
来自专栏walterlv - 吕毅的博客

每次都要重新编译?太慢!让跨平台的 MSBuild/dotnet build 的 Target 支持差量编译

发布于 2018-05-14 07:46 更新于 2018-07...

6810
来自专栏iOS122-移动混合开发研究院

【YFMemoryLeakDetector】人人都能理解的 iOS 内存泄露检测工具类

背景 即使到今天,iOS 应用的内存泄露检测,仍然是一个很重要的主题。我在一年前,项目中随手写过一个简单的工具类,当时的确解决了大问题。视图和控制器相关的内存泄...

26460
来自专栏Golang语言社区

利用Go语言实现简单Ping过程的方法

、准备工作 安装最新的Go 1、由于Google被墙的原因,如果没有VPN的话,就到这里下载:http://www.golangtc.com/download ...

51450
来自专栏大内老A

.NET Core跨平台的奥秘[下篇]:全新的布局

从本质上讲,按照CLI规范设计的.NET从其出生的那一刻就具有跨平台的基因,这与Java别无二致。由于采用了统一的中间语言,微软只需要针对不同的平台设计不同的虚...

25860
来自专栏debugeeker的专栏

公司内部文档安全软件coredump分析实例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...

11420

扫码关注云+社区

领取腾讯云代金券