根据我的经验,对于.NET平台而言,主要的ORM框架(NHibernate、LinqToSql和Entity Framework)在跟踪已加载的对象时表现最佳。这在简单的客户端-服务器应用程序中可以很好地工作,但在使用三层或更多层结构以及面向服务的体系结构(Service Oriented Archtitecture)中使用Web服务时,则不可能实现。虽然可以通过自己编写大量跟踪代码来完成这一任务,但ORM是否不应该简化数据库访问呢?
在面向服务的体系结构中使用ORM的想法是否真的可行呢?
根据我的经验,对于.NET平台而言,主要的ORM框架(NHibernate、LinqToSql和Entity Framework)在跟踪已加载的对象时表现最佳。这在简单的客户端-服务器应用程序中可以很好地工作,但在使用三层或更多层结构以及面向服务的体系结构(Service Oriented Archtitecture)中使用Web服务时,则不可能实现。虽然可以通过自己编写大量跟踪代码来完成这一任务,但ORM是否不应该简化数据库访问呢?
在面向服务的体系结构中使用ORM的想法是否真的可行呢?
LLBLGen Pro 带有实体内部的更改跟踪功能。这意味着您可以使用预取路径(因此每个图节点一个查询)从数据库中获取图形,并将其序列化到客户端,更改它,发送回来并直接保存该图形,因为所有更改跟踪都在实体内部(并作为紧凑的自定义元素序列化在XML中)。
免责声明:我是llblgen pro的首席开发人员。
ORM框架仅在直接与数据库交互时有所帮助。即使在面向服务的体系结构中,ORM也只能帮助减轻编程最终层的负担。您需要其他技术,例如WCF,来处理服务部分。我不知道是否有人已经集成了ORM和服务,但应该很容易地将相同的类注释为实体和DataContract
。
你可以将memcached作为NHibernate的第二级缓存,这是你所说的“跟踪”的意思吗?
SignumFramework 也在实体内部具有跟踪功能。它还拥有完整的 Linq 提供程序,但仅适用于新数据库(它从您的 C# 实体生成模式,而不是相反)。
更改跟踪:http://www.signumframework.com/ChangeTracking.ashx
免责声明:我是 Signum Framework 的首席开发人员 :)