【问题标题】:ObjectContext.Translate - Use different property namesObjectContext.Translate - 使用不同的属性名称
【发布时间】:2013-04-03 22:15:44
【问题描述】:

我正在使用实体框架并调用此处所述的存储过程: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;}

【问题讨论】:

    标签: c# entity-framework-5 objectcontext


    【解决方案1】:

    不,你不能这样做。 Translate 遍历读取器内部的数据集,并将其直接映射到您传入的实体中定义的属性。它不知道数据成员注释。这是有道理的,因为数据注释用于序列化,您的数据层不需要知道这些。

    我建议您在具有直接映射到您正在调用的查询的属性的实体上调用 Translate。然后,让您的 DataMember 定义它将被转换为以进行序列化的名称。例如,如果您的查询返回 listID 和 listName:

    [DataMember("ID")]
    public string listID { get; set; }
    
    [DataMember("Name")]
    public string listName { get; set; }
    

    【讨论】:

    • 我们在客户端(前端)和服务/数据层之间共享数据契约,所以我们最终只使用存储过程返回的列名。
    猜你喜欢
    • 1970-01-01
    • 2021-02-02
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    相关资源
    最近更新 更多