Orm 帮助构建Telerik OpenAccess域模型

Orm 帮助构建Telerik OpenAccess域模型,orm,telerik,telerik-open-access,Orm,Telerik,Telerik Open Access,我的公司即将使用Telerik的OpenAccess ORM启动一个新项目。这对我们来说是一个新产品,也是我们第一次在项目中使用ORM而不是基于数据集的方法。目前,我们对构建数据层的最佳方式存在一些分歧。具体来说,我们应该为项目提供单个.rlinq文件和域模型,还是应该为每个屏幕/模块提供仅包含特定屏幕/模块所需的表和表中的列的.rlinq文件。为了说明后者: 假设我们有一个Person表,其中包含名字、姓氏、ssn、出生日期、性别和婚姻状况字段。在personal information(个人

我的公司即将使用Telerik的OpenAccess ORM启动一个新项目。这对我们来说是一个新产品,也是我们第一次在项目中使用ORM而不是基于数据集的方法。目前,我们对构建数据层的最佳方式存在一些分歧。具体来说,我们应该为项目提供单个.rlinq文件和域模型,还是应该为每个屏幕/模块提供仅包含特定屏幕/模块所需的表和表中的列的.rlinq文件。为了说明后者:

假设我们有一个Person表,其中包含名字、姓氏、ssn、出生日期、性别和婚姻状况字段。在personal information(个人信息)屏幕中,我们需要所有这些字段,因此我们将整个表包含在该.rlinq文件的域模型中。在另一个屏幕上(使用单独的.rlinq文件),我们只需要此人的姓氏和ssn,因此.rlinq文件中的person对象只包含姓氏和ssn

这种方法的主要论点是,我们应该只选择特定屏幕所需的数据,而不是更多。在我们当前基于数据集的应用程序中,这是有意义的。还有人担心,拥有不必要的表和关系会导致加载不必要的数据,即使不需要,也会导致网络负载。反对这一点的理由是,我们正在分割域模型并引入不必要的复杂性,而ORM的部分工作是通过缓存和延迟加载来管理数据获取。我们无法就此达成一致,也无法以这种或那种方式找到任何结论性信息,因此我们向StackOverflow社区寻求帮助

如果有必要,我们正在构建一个基于Windows窗体的intranet应用程序,数据层将位于WCF服务的后面,数据库将有大约100个表


提前感谢您的帮助

通常,最好在单个RLINQ文件中建立实体域模型。然后,您可以根据需要将查询投影到ScreenModels/DTO中来处理屏幕问题

例如

假设您有一个具有多个属性的person对象,但是,在特定屏幕上,您只希望返回名字和姓氏

   var myUserDto = context.People
                          .First()
                          .Select( p => new UserDto { FirstName= p.FirstName, 
                                                      LastName=p.LastName });
OpenAccess足够智能,在这种情况下只查询名字/姓氏。现在,当屏幕需要person对象中的另一个可用属性时,您只需要更新dto和LINQ查询

此外,如果您计划使用OpenAccess提供的服务,它会根据OpenAccessContext创建一个服务。因此,如果每个实体都有一个RLINQ,那么每个实体都有一个服务,至少可以说,在客户机上维护这个服务是很痛苦的。如果手动滚动服务层,这里显然会有更多的控制权,但仍然需要不断记住哪个OpenAccessContext处理每个域对象

仅供参考,对于大型模型,研究OpenAccess提供的帮助将大型模型分解为可管理的部分可能会有所帮助


希望这有帮助!:)

Telerik可能是问这个问题的最佳人选。@Robert Harvey-谢谢,我们也在这样做。我们希望在这件事上得到尽可能多的意见。