【问题标题】:MAPPING POCO to Objects[] with property将 POCO 映射到具有属性的 Objects[]
【发布时间】:2015-05-19 19:44:01
【问题描述】:

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

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

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

如果可能的话,如果可能的话,我想一般地做这一切, 所以也许我需要像 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 答案:一个更具描述性的类模型——这意味着我所有的 POCO 都需要类似的东西来处理浮点数、布尔值、字符串、int 等,并且也使得它的硬编码不是那么通用。 - 我需要为每种数据类型创建一个类,然后在我的所有 POCO 中更改为使用该类和 UI 绑定,并且数据库更新我需要获取这些值。

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

}

【问题讨论】:

    标签: c# mapping poco


    【解决方案1】:

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

    public Dictionary<object, Action<machine,object>> setters
     = new Dictionary<object, Action<machine,object>>();
    

    我的 clientID 是 Guid.PropertyName,所以现在我可以轻松匹配 Machine(Guid).Property

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多