繁体   English   中英

库; POCO / Linq-to-Sql实体类之间的映射

[英]Repository; Mapping between POCOs / Linq-to-Sql entity classes

我正在使用Sql Express制作我的第一个数据库程序。 目前我正在使用Linq-to-Sql进行数据访问,我的存储库类返回“实体”类型对象。 含义; 我扩展dbml实体类以用作我的业务对象类。 现在我想让它更加分离; 并有POCO商务对象。

这就是我想知道可能存在哪些不同解决方案的地方。 在我看来,我需要在存储库中手动将property-by-property,每个实体类映射到域类。 到目前为止,我有大约20个表,总共有几百列。 现在..我只是想验证这是否仍然是您使用的常见/典型方法? 如果有替代方案而不会引入过多的复杂性,那会是什么?

在手动创建映射之前,请先查看AutoMapper

AutoMapper是一个对象 - 对象映射器。 对象 - 对象映射的工作原理是将一种类型的输入对象转换为另一种类型的输出对象。 AutoMapper的有趣之处在于它提供了一些有趣的约定来解决如何将类型A映射到类型B的问题。只要类型B遵循AutoMapper的既定约定,几乎零配置就需要映射两种类型。

AutoMapper是用于执行类到级转换的好工具。 但是,我正在考虑将Linq2Sql和AutoMapper结合起来的DAL,我在想为什么不选择Fluent NHibernate呢? 它很容易设置,适用于任何数据库,包括SqlExpress,并且有一个Linq提供程序可以非常无缝地集成。 所有这些都是免费的开源代码,并且非常常用,因此有充足的文档和支持。

如果您想继续使用Linq2Sql,但拥有功能更全面的域模型,您可以考虑从DTO中获取您的域模型。 这将允许您在域中拥有业务逻辑,并将属性传递给DTO。 但是,要了解Linq2SQL对象将无法直接转换为域对象; 你需要一个域中的构造函数来获取DTO并将信息复制到域中(至少需要DTO到域的单向映射)。 但是,域可以像DTO一样对待(因为类总是它的父级),因此不需要反向转换; 只需将域类交给它期望DTO的存储库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM