MyBatis.NET(以前的 iBatis.NET)是一个数据映射工具,它有一个我觉得非常有用的功能。如果您从未听说过,它是一个 ORM 工具,允许您编写 SQL,创建域对象,并使用 XML 将数据库列映射到域对象属性。
这些结果映射之一可能如下所示:
<resultMap id="Contact" class="Contact" >
<result property="ContactId" column="ContactId" />
<result property="FirstName" column="FirstName" />
<result property="MiddleInitial" column="MiddleInitial" />
<result property="LastName" column="LastName" />
</resultMap>
在那里,您有一个结果 ID、一个类别名(例如,映射到 Namespace.Folder.Contact)以及一个列到属性映射的列表。
您可能感兴趣的地方在于,您可以像从类继承一样扩展结果映射。在您的情况下,您可能有:
<resultMap id="Person" class="Person" >
<result property="Id" column="Id" />
<result property="Name" column="Name" />
<result property="Email" column="Email" />
<result property="Phone" column="Phone" />
</resultMap>
对于您的其他情况:
<resultMap id="PersonExtended" extends="Person" class="Person">
<!-- inherits all the "Person" result map properties -->
<result property="SpecialPhoneNumber" column="SpecialPhoneNumber" />
<result property="VeryCustomValue" column="VeryCustomValue" />
</resultMap>
然后您将有两个单独的查询,一个仅选择基本信息并映射到“Person”结果映射,另一个查询映射到包含更多列的“PersonExtended”结果映射。
还支持选择字典并避免 N+1 选择。需要注意的是:我与 MyBatis 项目没有任何关系,我只是发现它非常灵活且非常可靠的数据映射器。我将它用于我的所有项目,主要是因为我编写了一个工具,只需将其指向数据库即可生成我的整个数据访问层。
设置它有点像 PITA,但也许它对你有用!