EF WebAPI自我引用循环

时间:2017-05-17 14:54:56

标签: c# entity-framework asp.net-web-api

我正在使用EF获得自我引用问题而我正试图过来但仍然允许服务能够执行GET传递{[FromODataUri] int key}一个键并返回一个IQuerable Obj到必要时获取扩展表。下面是表格的精简版。有关如何处理这种情况的任何建议。

public class People
{
 public int PeopleId {get;set;}
 public string PeopleName {get;set;}

 public int? ProductId{get;set;}

 public virtual Product Product{get;set;}
}

ProductId是产品中的PK,但不是必需的。根据惯例,它不必用PK DataAnnotation覆盖。

public class Product
{
   public Product()
   {
      PeopleCollection = HashSet<People>();
   }
   public int ProductId {get;set;}
   public string ProductName {get;set;}
   public virtual ICollection<People> Peoples{get;set;}
}

2 个答案:

答案 0 :(得分:0)

在这种情况下,我建议使用DTO或使用匿名对象,例如:

public IHttpActionResult Get() {
    var response = db.YourTable.Select(x=>new{
       x.PeopleId,
       x.PeopleName,
       x.ProductId,
       Product= new {
         x.ProductId,
         x.ProductName  
       }
    }).toList();
    return Ok(response);
}

这就是我如何使用匿名对象,如果你想使用DTO,你只需要映射它们,希望这就是你要找的。

仅针对特定身份证件:

public IHttpActionResult Get(int id) {
    var response = db.YourDb.Select(x=>new{
       x.PeopleId,
       x.PeopleName,
       x.ProductId,
       Product= new {
         x.ProductId,
         x.ProductName  
       }
    })Where(x=>x.PeopleId == id).toList();
    return Ok(response);
}

注意,此方法使用查询字符串参数

答案 1 :(得分:0)

经过一段时间后,我想出来了。如果您是从APIController继承,则会出现自引用问题,但如果您切换到从ODataController继承,则一切正常。

所以

 public class MyController : ApiController
    {
     ..... Bunch of code here
    }

public class MyController : ODataController
    {
     ..... Bunch of code here
    }