从Delphi 2010客户端使用C#WCF服务:数据绑定和实体框架

时间:2012-04-25 09:20:22

标签: wcf entity-framework interop delphi-2010 odata

我正在将用Delphi 2010编写的win32 Delphi VCL应用程序迁移到多层体系结构。
该应用程序通过devexpress广泛使用ExpressGrids(TcxGrid)进行数据绑定。

  • 我使用了基于Entity框架设计的数据层 dbContext和数据传输对象。
  • 我已经使用基于实体数据模型的T4模板通过WCF公开了CRUD操作。

这一切正常,Delphi客户端成功与WCF服务通信,以交换数据传输对象。

问题是,如何维护数据绑定功能? 我倾向于编写一个返回通用数据表或数据集的服务方法。我可以将linq语句结果转换为数据集,表或视图吗? 我不确定我可以将Expressgrids绑定到对象数组(WCF返回实体集合,但Delphi看到数组)。有没有人有这种互操作性的经验?

修改

我有数据服务返回DataSet,但猜猜是什么?来自.net的xml数据集与Delphi(至少2010年)不兼容。我已经设法使用Gekko example (modified)来使用它,但由于我们需要从客户端运行的查询的复杂性,它不会实用。我们现在的选择是将网格保留原样直到BLL完成并启动一个新项目以在C#中重新编写客户端(作为web或Windows应用程序),或者使用RemObjects Hydra编写一个通用的Grid插件,嵌入带有网格的表格 - 试图现在解决这个问题。

更新 我已经放弃了Gekko DataSet实现,转而通过研究Delphi中TClientDataSet所需的xml格式来编写自己的实现。在服务器端,我实现了一个服务,它以字节数组的形式返回符合TClientDataSet的xml。在客户端上,我将其加载到TStringStream中,然后将流加载到TclientDataSet组件中。我将这个用于小型集合,以便在我们推出Hydra解决方案时提供查找和数据绑定。

xml大致遵循以下格式:

"2.0">
  <METADATA>
    <FIELDS>
      <FIELD attrname="ID" fieldtype="i4"/>
      <FIELD attrname="Status" fieldtype="string" WIDTH="10"/>
      <FIELD attrname="Created" fieldtype="date"/>


<ROWDATA>
    <ROW RowState="4" ID="1" Status="Code1" Created="20130707" Made="20130707T21:37:55341" Stopped="00:00:00000" Volume="1174" IsReady="TRUE"/>
    <ROW RowState="4" ID="2" Status="Code2" Created="20130707" Made="20130707T21:37:55341" Stopped="00:00:00000" Volume="2149" IsReady="FALSE"/>

This是关于xml格式的少数信息来源之一。

我知道问题已经过时了,但我很感激有关互操作性和遗留代码迁移的任何见解。

由于

0 个答案:

没有答案