实体框架 - 如何返回没有相关对象的单个实体
本文关键字:实体 对象 单个 返回 框架 何返回 | 更新日期: 2023-09-27 18:31:51
Im在关闭
LazyLoad的MVC项目中使用EF6,DB First。但是,在更新某些实体属性时,我发现在同一上下文中更新函数中的实体相关对象时,当我返回单个实体时,它还包含我已更新的相关对象。我只想返回单个实体。
所以我的问题是,除了创建新上下文并再次检索实体之外,是否有更好的方法来"清除"相关实体?或者您会在不同的上下文中更新相关实体吗?还是有比这些更清洁的方法?
提前感谢!
您的问题是您希望实体框架以它不打算的方式运行。 根据您的评论和问题,似乎在同一上下文中,您正在接触父实体及其一个或多个子实体。 因此,变更跟踪器正在为您整合所有这些。
您的第二个问题是您的代码返回可能如下所示:
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);
}