本文章以下图所示的关系图来作为练习的数据库(图片引用自ccBoy的博客)
在这个关系图中需要特别注意的一点是Book表上的Author ID字段消失了
Entity Framework屏蔽和封装了Book表中Author ID属性从而让客户端或用户看起来也更加面向对象接着ccBoy在这个数据库关系的基础上为大家提供了如下种类型标准操作的示例代码
新增一个作者和他的一本书
新增一个作者但不增加书
给一个给定的作者增加一本书的记录
修改作者的基本信息并更新但未修改作者和书的关联关系
修改书的基本信息并更新但未修改作者和书的关联关系
改变一个已关联的作者和书的关系将书关联到另外一个作者
删除给定作者的一本书
删除一个作者目前作者没有创作任何一本书
删除一个作者也包括他创作了所有书的记录
除了以上的类操作外他也给出了一种处理异常的示例代码值得大家借鑒
在逐一展示了这些示例代码后ccBoy对ADONET数据服务的操作进行了一个总结如下的总结对于理解在客户端对ADONET数据服务进行操作有很大的帮助
四个 CRUD 操作(CreateRetrieveUpdate 和 Delete)中的每个操作都映射到一个不同的 HTTP 动词Retrieve 映射到 GETCreate 映射到 POSTUpdate 映射到 PUTDelete 映射到 DELETE
客户端的Context对象你可以把它想像成离线版本的数据源Entity Framework Context
客户端所有的CUD的操作只有在调用SaveChanges()才会将变化传送到真正的数据源
SetLinkAddLinkDetachLink是进行实体关系管理的……DetachLink是在你要删除某个实体你需要将有关联的两个实体之间的关联打断并告诉客户端的Context而DeleteLink更多的是告诉客户端Context你要将两个实体间的关联完全打断这个方法有用但我觉得它的实用性最低
AttachTo和Detach则是你用了处理实体状态的主要方法……当你调用AttachTo作用于一个POCO对象的时候这个对象变成了实体……Detach方法你可以将其理解成反操作即将一个实体还原成POCO
有时候AttachTo操作是隐形的比如所有通过Context查询方法查询来的对象其实都是实体同样你将一个POCO对象赋值给一个实体对象时似乎也默认会将这个POCO对象加入到客户端Context中
AddToXXX(比如AddToAuthor)是Entity Framework自动生成的简易方法其实和调用AddObject方法等同最后ccBoy对ADONET数据服务和ADONET实体框架进行了一些讨论涉及到和NHibernate比较对编程模型和系统构架的影响以及一些性能方面的探讨等