簡體   English   中英

實體框架-如何返回沒有相關對象的單個實體

[英]Entity Framework - How to return single entity without related objects

我在關閉LazyLoading的MVC項目中使用EF6,DB First。 但是,在更新某些實體屬性后,我發現在同一上下文中更新功能中的實體相關對象時,到我返回單個實體時,它還包含我已更新的相關對象。 我只想返回單個實體。

所以我的問題是,除了創建新的上下文並再次檢索該實體之外,還有沒有更好的方法來“清除”相關實體? 還是會在不同的上下文中更新相關實體? 還是有比這更清潔的方法?

提前致謝!

您的問題是您期望Entity Framework的行為方式並非預期的。 根據您的評論和問題,似乎您在同一上下文中接觸一個父實體及其一個或多個子實體。 結果,變更跟蹤器會為您整合所有這些內容。

第二個問題是您的代碼返回可能看起來像這樣:

public ActionResult Stuff(){
    //MyEntityFrameworkClass is an autogenerated Entity Framework 
    //object that represents a table in your database
    List<MyEntityFrameworkClass> items = db.MyEntityFrameworkClass.ToList();
    Return Json(items);
}

這很糟糕,因為您將為數據庫中的每一項返回所有內容,包括已附加的任何相關實體。 在這些情況下會發生什么:

  • 您不需要返回每一列
  • 您想要返回一些未包含在實體中的自動計算的列
  • 您需要來自多個實體的值

這就是視圖模型(或數據傳輸對象)發揮作用的地方。 創建一個模型, 確切說明客戶的需求,僅此而已。

public class MyApiModel(){
   public string Name {get;set;}

   public int SomethingElse {get;set;}

   //Computed property in our view model
   //Lets say anything greater than 2 is valid
   public bool IsValid => SomethingElse > 2;
}

現在,您應該返回此類對象的列表(或任何其他形式)。

public ActionResult Stuff(){
    List<MyApiModel> items = db.MyEntityFrameworkClass.Select(x=>new MyApiModel{
          //Notice I am not setting the isvalid property
          //Its computed, class takes care of returning proper value
          Name = x.MyNameColumn, 
          SomethingElse = x.MyOtherColumn
    }.ToList();
    Return Json(items);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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