【问题标题】:How do I working with objects that can change from one client to another如何处理可以从一个客户端更改为另一个客户端的对象
【发布时间】:2019-01-12 17:26:17
【问题描述】:

我有一个问题,我为一个对象(例如帐单文件)提供数据,其中数据元素因客户端而异。更具体地说,数据中的字段数和不同名称的字段数。在使用 C# 中的对象时,我正在寻找解决方案。

目前我已经为每个客户创建了表格。这些字段特定于客户端,我在上传数据时使用映射过程。我在 SQL Server 中也有动态查询来处理所有的 crud 进程。这一切都很好,但我相信有更好的解决方案,我相信保存 Json 数据将是其中之一。提取数据我首先查询表的标题,然后将数据映射到数据网格等的标题。同样,我已经有了一个可行的解决方案,但我相信有更好的解决方案,我正在寻找带有示例的建议。顺便说一句,我在 C# 中考虑过动态对象,但看起来你必须预先知道对象的哪些字段。

【问题讨论】:

  • ExpandoObject 可能是您正在寻找的机器人。 .NET 是强类型的,包括任何类都具有的属性/字段。 ExpandoObject 在那里,所以我们可以处理弱类型的东西,比如 JSON。
  • 克里斯托弗,感谢您的回答。出于您所说的原因,我考虑过使用 ExpandoObject 。但是,我不确定这是正确的解决方案。正如我所说,每个计费对象都有不同的字段和不同的范围。 ExpandoObject 提供了灵活性,但您仍然必须确定一些细节才能使用它们。我正在考虑在整个过程中使用 json 以及预设字段,这些字段是特定于应用程序类型的行业,并且需要在业务逻辑需要这些字段的某个点将客户端字段映射到它们。好建议。

标签: c# json dynamicobject


【解决方案1】:

我建议你应该创建映射表,但不需要使用动态sql之类的东西,这里是表:

create table d_billing_object -- one row here means one field from your question
(
     id int not null identity (1, 1) primary key
    ,name nvarchar(255) not null
)
create table d_billing_client
(
     id int not null identity (1, 1) primary key
    ,name nvarchar(255) not null
)
create table d_billing_mapping 
(
     billing_client_id int not null
    ,client_billing_object_id int not null
    ,billing_object_id int not null
    ,constraint PK_d_billing_mapping primary key (billing_client_id, client_billing_object_id, billing_object_id)
    ,constraint FK_d_billing_mapping_d_billing_object foreign key (client_billing_object_id) references d_billing_object (id)
    ,constraint FK_d_billing_mapping_d_billing_object_2 foreign key (billing_object_id) references d_billing_object (id)
    ,constraint FK_d_billing_mapping_d_billing_client foreign key (billing_client_id) references d_billing_client (id)
)

之后,您只需创建所有计费对象并在您拥有的所有客户的映射表中使用它们。

【讨论】:

  • 亚历克斯,感谢您的回答。您的解决方案很有趣,并且对于将数据保存为 Json 对象很有用。我不关心如何实现数据库。我在询问有关服务或应用程序层的建议。我可以像现在一样对 UI 使用严格的 Json。绕过动态查询以添加和更新也很容易更改为 Json。不过建议很好。
猜你喜欢
  • 2015-11-06
  • 2019-04-08
  • 1970-01-01
  • 1970-01-01
  • 2012-03-06
  • 1970-01-01
  • 2018-01-06
  • 2014-05-23
  • 1970-01-01
相关资源
最近更新 更多