使用 属性 将 POCO 映射到 Objects[]

MAPPING POCO to Objects[] with property

我有 3 个 classes,我可以控制其中的 [Machine - 我的 POCO]。 2 classes 是第 3 方; Item 和 ItemValue(派生自 Item)。项目有一个 属性 UniqueIdentifier

我有一台服务器,需要将 Item[] 元素传递给它,这些元素由服务器更新。 服务器有一个更改事件,我收到一个带有参数 ItemValue[] 项目的回调。 哪些项目可以包含任何已更改的内容 - 包括不在我的 POCO 中的项目。 我需要轻松地将 属性 ItemValue.Value 映射到我的 POCO 属性,这样我就可以设置 POCO 的值。 我正在使用 POCO 更新数据库并绑定到 UI,我已经实现了 INotify属性Changed 在这个 POCO.

POCO.Property = ItemValue[index].Value [我需要确保这个实际对象对应于 POCO.Property ] (有些我需要能够说 POCO.Property 属于 ItemValue[index].UniqueID ,我不想做迭代的嵌套循环,我在创建 Item[] 时确实可以控制 UniqueID ,越快越好,我正在考虑使用某种字典来映射它,但我不确定如何通过示例或在哪里、我的 Poco 或中介 class ..

如果可能的话,我想尽可能地做这一切, 所以也许我需要像 Mapper 这样的中介 我想我可以用它来创建我的项目 Item[] 对于 T 的每个 属性,CreateItem => Item,分配 UniqueIdentifier、assignTargetAddress、DataType 添加到字典

我看过:

Mapping POCO to Entity in Entity Framework

Adding attributes to POCO properties for mapping x,y cells 答案:一个更具描述性的 class 模型——这意味着我的所有 POCO 都需要这样的东西来表示 float、bool、string、int 等,并且还使得它几乎是硬编码而不是那么通用。 - 我需要为每种数据类型做一个 class,然后在我所有的 POCO 中更改为使用该 class 和 UI 绑定,而数据库更新我需要获取这些值。

并且: http://blogs.msdn.com/b/alexj/archive/2009/06/19/tip-26-how-to-avoid-database-queries-using-stub-entities.aspx 似乎更像是一种数据库方法,我的对象正在返回,我不知道返回了多少或什么对象,只是因为它们具有与我创建并传递给服务器的项目对应的 uniqueID。我需要一些方法来使用该 UniqueID 将 属性 映射回 POCO。 我猜这里看起来与我正在寻找的相似,但我只是不确定它或如何转换 - 我不想将所有内容都转换为字符串 - 也许我正在看这个 worng。 C# User Defined CSV Mapping to POCO

感谢任何帮助,因为我比大师更幼稚。

下面的代码示例:

public List<Machine> Machines;
public List<Item> MachineItems;

public class Machine : IMachine
{
 [DataMember]
 double SensorA {get; set;}

 [DataMember]
 double SensorB {get; set;}

 [DataMember]
 string Sytem1 {get; set;}
}
public class ItemValue : Item
{
 object value;
}
public class Item
{
 object clientID;
 string targetAddress;
 System.Type sysType;
}
OnNewlyReadValues(ItemValue[] itemValues)
{
   // each itemValue in itemValues represents a property
   // in the POCO .
   // itemValues May contain one itemValue or all itemValue
   // that represent the values in the POCO.
   // Determine if itemValue is for which Machine.PropertyName
   // property SensorA  (or any of the properties)
   // Machine.Property = itemValue.Value;

}

我在 codeproject 上找到了提供给我的答案: 使用带有动作的字典可以让我跟踪项目 以及它通过 clientID

所属的 属性
public Dictionary<object, Action<machine,object>> setters
 = new Dictionary<object, Action<machine,object>>();

我的 clientID 是 Guid.PropertyName 所以现在我可以轻松匹配 Machine(Guid)。属性