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