当前位置: 首页 > 编程语言 > C#

使用using声明实体框架上下文共享

时间:2023-04-10 16:54:19 C#

DeclaringEntityFrameWorkContextwithusing这是声明实体框架上下文的最佳实践//实体代码return;}orfunction(){using(DBContextcontext=newDBContext()){//实体代码}}我们需要在EntityFrameWork中使用吗?如果是,我的第二个问题是在数据访问层中我执行EF并使用我的DL函数将结果存储在IEnumerable中(){IEnumerablesomething=null;using(DBContextcontext=newDBContext()){IEnumerablesomething=....}returnsomething;}在控制器中function(){Listsome=something.ToList();在我的控制器中,我得到了这个列表,因为我需要做一些查找操作“操作无法完成,因为DbContext已经被处理实体框架”是的,我可以从DL返回一个列表并且它工作正常如果我使用IEnumerable,怎么能我处理那个?您可以通过在放置上下文之前调用IEnumerable上的.ToList()来避免延迟加载EF行为(即在您的using块中)是的,使用是最佳实践,因为它会清理您的上下文。using语句是以下的快捷方式:try{//在using语句中执行代码}finally{//通过调用.Dispose()清除上下文,无论如何}请记住,您的上下文可能会返回IEnumerables,并且由于EF支持延迟加载,这些对象在被提取到具体集合(即yourResult.ToList())之前不会被填充。在这种情况下,通常的负面结果是:}}//失败的代码,假设Manager是一个延迟加载的实体,这会导致异常但编译没有问题varacctEmps=GetEmployeesInAccounting();varsomething=acctEmps.First().Department.Manager.Department;您可以使用.Include(emp=>emp.Manager)(linq扩展方法)并使用.ToList();绑定结果以避免这个.ToList();一旦调用了.ToList()方法,您的请求将立即执行到数据源。这就是为什么您不能在控制器中执行.ToList()的原因,因为您的上下文位于using块的末尾。在您的DL方法中,只需执行以下操作:IEnumerablefunction(){using(DBContextcontext=newDBContext()){returnsomething.ToList();在您的控制器中,您将获得Something的IEnumerable:varmySomethingIEnumerable=DL.Function();希望有帮助!以上就是C#学习教程:using语句实体FrameWork上下文分享的全部内容,如果对您有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处: