我正在使用Entity Framework并调用存储过程,如下所述:http://msdn.microsoft.com/en-us/data/jj691402.aspx在“使用代码访问多个结果集”下
执行存储过程后,我使用ObjectContext.Translate方法将结果存入数据协定对象,这要求数据协定属性与返回的数据匹配。
有什么方法可以使用不同的属性名称,但仍然有Translate方法正确映射它们吗?
例如,我有一个获取国家/地区列表的过程,它返回以下列:listID,listName。而不是那些名称,我希望我的数据合同对象只有ID和名称。
我尝试将Name参数添加到DataMember属性,但这不起作用。
[DataMember(Name="listID")]
public string ID { get; set;}
答案 0 :(得分:1)
不,你不能这样做。 Translate遍历阅读器内部的数据集,并将其直接映射到您传入的实体中定义的属性。它不知道数据成员注释。这是有道理的,因为数据注释用于序列化,您的数据层不应该知道。
我建议您在具有直接映射到您正在调用的查询的属性的实体上调用Translate。然后,让您的DataMember定义它将被转换为序列化的名称。例如,如果您的查询返回listID和listName:
[DataMember("ID")]
public string listID { get; set; }
[DataMember("Name")]
public string listName { get; set; }