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