【发布时间】: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;
}
【问题讨论】: