【问题标题】:Trying to use System.Data.DataSet for generating reports尝试使用 System.Data.DataSet 生成报告
【发布时间】:2016-10-12 21:30:47
【问题描述】:

场景:我需要创建一个数据不能很好地映射到现有实体的报告。

解决方案:我的解决方案是编写一个原始方法并让它返回一个 DataSet。

假设: 如果我编写了一个原始方法,其中查询中的所有字段都不匹配实体的属性,只要我指定返回类型 System.Data.DataSet,它仍然可以工作。

问题

  1. 我的假设正确吗?
  2. 使用建模器,除了将返回类型名称指定为 System.Data.DataSet 之外,我还有什么要做的吗?
  3. 您是否在我的代码中看到任何错误。我在模型上进行了构建,它生成了没有错误的代码。但是当我构建/编译 BOM 时,当我得到错误时。我必须将我的代码/xml 作为代码 sn-p 输入,因为 stackexchange 很古怪,并且是它显示的唯一方式。运行代码截图按钮不会执行任何操作。

  <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:\Projects2\Amikids.TimeTracking\Amikids.TimeTracking\Test1Collection.cs

错误 27 'System.Data.DataSet' 不包含 'PageLoadReport' C:\Projects2\Amikids.TimeTracking\Amikids.TimeTracking\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>

【问题讨论】:

    标签: codefluent


    【解决方案1】:

    如果要创建返回DataSet 的方法,则必须创建一个RAW 方法并在属性网格中将返回类型设置为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/

    博客文章中的语法是有效的,但建模者总是编写完整的语法,这可能会更冗长。

    【讨论】:

    • 谢谢,我发现轻量级实体在我的情况下最有意义。原因是不仅报告数据不能很好地映射到实体的属性,而且报告本身也不能很好地与任何单个实体联系起来。因此,我创建了一个名为 reports 的命名空间,这就是我放置所有轻量级报表实体的位置。
    猜你喜欢
    • 2020-05-28
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    相关资源
    最近更新 更多