Попытка использовать System.Data.DataSet для создания отчетов

#codefluent

#codefluent

Вопрос:

Сценарий: мне нужно создать отчет, в котором данные плохо сопоставляются с существующими объектами.

Решение: Мое решение — написать необработанный метод и заставить его возвращать набор данных.

Предположение: если я напишу необработанный метод, в котором ни одно из полей в запросе не соответствует свойствам объекта, он все равно будет работать, пока я указываю возвращаемый тип System.Data.DataSet .

Вопросы:

  1. Верно ли мое предположение?
  2. Использование средства моделирования, кроме указания имени возвращаемого типа как System.Data.DataSet, есть ли что-нибудь еще, что я должен сделать?
  3. Видите ли вы какие-либо ошибки в моем коде. Я сделал сборку на модели, которая сгенерировала код без ошибок. Но когда я создаю / компилирую спецификацию, это происходит, когда я получаю ошибки. Мне пришлось ввести свой код / xml в виде фрагмента кода, потому что stackexchange является причудливым и был единственным способом его отображения. Кнопка запуска code snipper ничего не сделает.
   <cf:entity name="Test1" namespace="Amikids.TimeTracking" categoryPath="/Amikids.TimeTracking">
    <cf:property name="Id" key="true" />
    <cf:property name="Name" />
    <cf:instance>
      <cf:instanceValue name="Id">bda62961-eef9-48bd-977e-00732ce36c66</cf:instanceValue>
      <cf:instanceValue name="Name">Mike</cf:instanceValue>
    </cf:instance>
    <cf:instance>
      <cf:instanceValue name="Id">3378eddd-cd46-40e3-b5c5-eecaa1477229</cf:instanceValue>
      <cf:instanceValue name="Name">Joe</cf:instanceValue>
    </cf:instance>
    <cf:method name="LoadReport" body="LOAD() ORDER BY Name" returnTypeName="System.Data.DataSet" />
  </cf:entity> 

Ошибки:

Ошибка 26 ‘System.Data.DataSet’ не содержит определения для ‘LoadReport’ и не удалось найти метод расширения ‘LoadReport’, принимающий первый аргумент типа ‘System.Data.DataSet’ (вам не хватает директивы using или ссылки на сборку?)

Ошибка 25 ‘System.Data.DataSet’ не содержит определения для ‘PageDataLoadReport’ C:Projects2Amikids .Отслеживание времени Amikids.Отслеживание времени Test1Collection.cs

Ошибка 27 ‘System.Data.DataSet’ не содержит определения для ‘PageLoadReport’ C:Projects2Amikids .Отслеживание времени Amikids.Отслеживание времени Test1Collection.cs

Дополнительные комментарии:

Я посмотрел статью https://blog.codefluententities.com/2011/06/22/dataset-support-in-codefluent-entities / но я думаю, что это устарело или неполно. Ниже приведен синтаксис из статьи, и он сильно отличается от того, что создает разработчик моделей. Я попытался использовать тот же синтаксис, что и в статье, но объекты Codefluent автоматически переписывались по-другому, что также не сработало.Метод также не указывает, использует ли он SQL Server, Oracle и т. Д., Поэтому я думаю, что в образце отсутствуют некоторые вещи.

 <cf:method name="LoadAllCities" body="raw" returnTypeName="System.Data.DataSet">
SELECT $Address::City$ FROM $Address$
</cf:method>
 

Ответ №1:

Если вы хотите создать метод, который возвращает a DataSet , вам нужно создать НЕОБРАБОТАННЫЙ метод и задать возвращаемый тип System.Data.DataSet в таблице свойств:

 <cf:method name="Custom" returnTypeName="System.Data.DataSet">
  <cf:body text="RAW" rawText="SELECT $Customer{Columns}$ FROM $Customer$" language="tsql" />
</cf:method>
 

Однако может быть более практичным использовать строго типизированную коллекцию. Вы можете создать легковесную сущность и необработанный метод:

 <CityAddress lightweight="true">
  <CityName persistentName="Address_CityName" />

  <cf:method name="LoadAllCities" body="load() raw">
    SELECT $Address::CityName$ FROM $Address$
  </cf:method>
</CityAddress>
 

Другим решением является использование представления: https://blog.codefluententities.com/2014/04/22/views-auto-lightweight-and-the-modeler /

Синтаксис из сообщения в блоге допустим, но разработчик модели всегда пишет полный синтаксис, который может быть более подробным.

Комментарии:

1. Спасибо, я нахожу, что облегченная сущность имеет наибольший смысл в моей ситуации. Причина в том, что данные отчета не только плохо соотносятся со свойствами объектов, но и сами отчеты на самом деле плохо привязаны к какому-либо отдельному объекту. Поэтому я создал пространство имен под названием отчеты, и именно туда я поместил все облегченные объекты отчетов.