MyBatis.NET (ранее iBatis.NET) - это инструмент для отображения данных, у которого есть особенность, которую я считаю действительно полезной.Если вы никогда не слышали об этом, это инструмент ORM, который позволяет вам писать SQL, создавать объекты домена и использовать XML для сопоставления столбцов базы данных со свойствами объекта домена.
Oneиз этих отображений результатов может выглядеть следующим образом:
<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>
Там у вас есть идентификатор для результата, псевдоним класса (который сопоставляется с 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, но, возможно, он может работать длявы!