将IEnumerable <object>从WCF转换为另一个本地IEnumerable <object>是可能的吗?</object> </object>

时间:2014-11-11 15:42:40

标签: c# .net model-view-controller casting dapper

我在WCF服务中有这个功能:

public IEnumerable<Product> ListProducts()
{
    return dal.RunDapper<Product>("listarProdutos");
}

它将使用Dapper执行proc并使用此类映射数据:

[DataContract]
public class Product
{
    [DataMember]
    public int PRODUCTID { get; set; }
    [DataMember]
    public string PRODUCTNAME { get; set; }
    [DataMember]
    public string COMPANYNAME { get; set; }
    [DataMember]
    public string CATEGORYNAME { get; set; }
    [DataMember]
    public decimal UNITPRICE { get; set; }
    [DataMember]
    public int UNITINSTOCK { get; set; }
}

在我的本地模特中:

public IEnumerable<Product> ListarProdutos()
{
    var retorno = WCF.ListProducts();
    return retorno.Cast<Product>();
}

我的本​​地Product类具有相同的属性:

public class Product
{
    public int PRODUCTID { get; set; }
    public string PRODUCTNAME { get; set; }
    public string COMPANYNAME { get; set; }
    public string CATEGORYNAME { get; set; }
    public decimal UNITPRICE { get; set; }
    public int UNITINSTOCK { get; set; }
}

这是我的控制者:

public ActionResult Index()
{
    ProductDB produtos = new ProductDB();
    var model = produtos.ListProducts();

    return View(model);
}

我的视图模型:

<tr>
    <td>@Html.DisplayNameFor(model => model.PRODUCTNAME)</td>
    <td class="hidden-xs">@Html.DisplayNameFor(model => model.COMPANYNAME)</td>
    <td>@Html.DisplayNameFor(model => model.CATEGORYNAME)</td>
    <td class="hidden-xs">@Html.DisplayNameFor(model => model.UNITPRICE)</td>
    <td>@Html.DisplayNameFor(model => model.UNITINSTOCK)</td>
</tr>

我收到此错误:

  

无法将ModeloTemplate.NorthWindWCF.Product类型的对象转换为   输入ModeloTemplate.Models.Product

2 个答案:

答案 0 :(得分:1)

WCF服务引用为Product创建了ModeloTemplate.NorthWindWCF.Product的类型。您将类型(如您所说,本地)定义为ModeloTemplate.Models.Product。这是两种不同的,不相关的类型,不能自动来回转换。查看AutoMapper

答案 1 :(得分:0)

如果要使用本地对象而不是数据合同对象,则本地模型缺少属性:

  • 重载=运算符并匹配属性并将数据协定对象分配给本地对象或
  • 创建一个将数据协定映射到本地对象的类。

或者在您的应用程序中使用数据协定对象。

希望这有帮助。