[英]EF WebAPI Self Referencing Loop
我遇到了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;}
}
在這種情況下,我建議使用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,只需映射它們,希望這就是您想要的。
對於一個特定的ID:
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);
}
注意,此方法使用查詢字符串參數
一段時間后,我發現了這一點。 如果從APIController繼承,則會出現自引用問題,但如果切換到從ODataController繼承,則一切正常。
所以
public class MyController : ApiController
{
..... Bunch of code here
}
至
public class MyController : ODataController
{
..... Bunch of code here
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.