簡體   English   中英

EF WebAPI自引用循環

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM