2014-03-26 27 views
0

我试图使用实体框架和WebAPI作为XML检索数据。 我得到的是一个空的子容器,我在OrderItem的填充两个记录与的OrderId = 1,但仍然一无所获,见下文<OrderItems/>实体框架/ WebApi无法检索相关结果

<ArrayOfOrder xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/WebApplication6.Models"> 
<Order> 
<ID>1</ID> 
<OrderItems/> 
<Username>Test</Username> 
</Order> 
</ArrayOfOrder> 

我的订单模型如下:

public class Order 
{ 
    public Order() 
    { 
     this.OrderItems = new HashSet<OrderItem>(); 
    } 
    public int Id { get; set; } 
    public string Username { get; set; } 
    public ICollection<OrderItem> OrderItems { get; set; } 

} 

我的OrderItems模型如下:

public class OrderItem 
{ 
    public int Id { get; set; } 
    public int OrderId { get; set; } 
    public int Qty { get; set; } 
    public Order Order { get; set; } 

} 

为GetOrders控制器代码:

// GET api/Order 
    public IQueryable<Order> GetOrders() 
    { 
     return db.Orders; 
    } 

我只是想学习实体框架和WebApi,这部分似乎是基本功能,我无法在基本级别找到任何可靠的参考。任何人都可以解释我错过了什么?

回答

0

经过几小时的搜索,我找到了解决方案。基本上我需要包含子数据集。这是在控制器功能完成的:

public IQueryable<Order> GetOrders() 
{ 
    return db.Orders.Include(p => p.OrderItems); 
} 

然而,这引入了错误:

Object graph for type 'System.Collections.Generic.HashSet`1[[WebApplication7.Models.OrderItem, WebApplication7, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' contains cycles and cannot be serialized if reference tracking is disabled.

这是通过使用Datacontracts
更新OrderItem模式固定为XML:

using System.Runtime.Serialization; 
[DataContract] 
public class OrderItem 
{ 
    [DataMember] 
    public int Id { get; set; } 
    [DataMember] 
    public int OrderId { get; set; } 
    [DataMember] 
    public int Qty { get; set; } 
    public Order Order { get; set; } 

} 

注在订单
之前没有[DataMember]注释不出所料我的结果:

<ArrayOfOrder xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/WebApplication7.Models"> 
<Order> 
<Id>1</Id> 
<OrderItems> 
    <OrderItem> 
    <Id>2</Id> 
    <OrderId>1</OrderId> 
    <Qty>231</Qty> 
    </OrderItem> 
    <OrderItem> 
    <Id>4</Id> 
    <OrderId>1</OrderId> 
    <Qty>2314</Qty> 
    </OrderItem> 
</OrderItems> 
<Username>first</Username> 
</Order> 
</ArrayOfOrder> 
+0

见http://programmers.stackexchange.com/questions/206942/is-moving-entity-framework-objects-over-a-webservice-really-the-best-way – haim770