我正在使用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;}
}
答案 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,你只需要映射它们,希望这就是你要找的。 p>
仅针对特定身份证件:
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
}