使用属性

时间:2015-05-19 19:44:02

标签: c# mapping poco

我有3个课程,我可以控制[机器 - 我的POCO]。 2个班级是第三方; Item和ItemValue(从Item派生)。 Item有一个属性UniqueIdentifier

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

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

如果可能的话,我想尽可能地做到这一点, 所以也许我需要像Mapper这样的中间人 我认为我可以用来创建我的物品[] 对于T的每个属性,CreateItem =>项目,分配UniqueIdentifier,assignTargetAddress,DataType 添加到词典中

我看过:

Mapping POCO to Entity in Entity Framework

Adding attributes to POCO properties for mapping x,y cells 答案:一个更具描述性的类模型 - 这意味着我的所有POCO都需要像float,bool,string,int等这样的东西,并且使得它几乎硬编码不那么通用。 - 我需要为每个数据类型做一个类,然后在我的所有POCO中更改为使用该类和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。 这里看起来类似于我想要的东西我想但我只是不确定它或如何变换 - 我不希望一切都转换为字符串 - 也许我正在看这个世界。 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;

}

1 个答案:

答案 0 :(得分:0)

我在codeproject上找到了一个答案: 使用带动作的字典将允许我跟踪项目 以及它通过clientID所属的财产

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

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