MVC 3 + EF 4.1
我在两种方法中选择处理DbContext:
Application_BeginRequest,投入
HttpContext.Current.Items和处置Application_EndRequest.DbContext),并启动每个控制器操作using(var unitOfWork = new
UnitOfWork()) { ... }请分享您的经验:您更喜欢哪一个?每种方法的利弊是什么?
asp.net-mvc entity-framework poco entity-framework-4.1 dbcontext
在我的扩展LinqToSql类中设置DataContext以便于访问的最佳实践是什么?
例如,我的dbml中有一个"User"实体,我想向这个类添加方法,如下所示:
Partial Public Class User
Public Function GetUser(ByVal UserID as Integer) as User
'Do Work
End Function
End Class
Run Code Online (Sandbox Code Playgroud)
为了访问我的DataContext,我必须在方法中声明它,如下所示:
Partial Public Class User
Public Function GetUser(ByVal UserID as Integer) as User
Dim dc as New MyDataContext()
Return (From u in dc.Users Where u.ID = UserID).Single()
End Function
End Class
Run Code Online (Sandbox Code Playgroud)
我不想为每一种方法都这样做.通常(如果我没有扩展LinqToSql dbml类)我可以这样做:
Partial Public Class User
Private dc as MyDataContext
Public Sub New()
dc = new MyDataContext()
End Sub
Public Function GetUser(ByVal UserID as Integer) as User
Return (From …Run Code Online (Sandbox Code Playgroud) 我是一名自学成才的C#程序员,在对事情有了非常透彻的理解时,我已经错过了一些内容,现在我偶然发现了一些我无法找到答案的内容.所以.我试图更好地理解C#中的线程安全性,但让我先指定上下文.
我目前正在开发一种Windows服务,该服务根据SQL Server数据库中的计划进行一些监视工作.它将通过向多个"客户端服务器"发出http请求来监视某些服务器,安装在这些服务器上的客户端将使用所请求的信息进行响应.
由于此监视器服务可能会非常繁忙,因此我已将其设置为在计划执行工作时将每个"预定指令"粘贴到新线程中.这是为了确保我的计时器保持良好的顺序,准备启动到下一个"客户端服务器"的下一条指令.
每条指令的一部分是必须登录已成功执行的数据库以及响应是什么等等.现在我已经在我的监视器服务中了public static class Logger,我相信这很方便,因为我现在可以Logger.Log(... )在需要记录时轻松地调用它.此类日志记录在此类中通过EF进入SQL Server数据库.
对我来说,这听起来真的很酷,而且我对它的工作原理感到非常满意,但我还没有测试任何东西.我所有这一切的问题是我的大脑告诉我,因为我的记录器类是静态的 - 根据我的理解,因此它只被实例化一次?- 如果超过1个线程试图Logger.Log(.. )在同一时间调用,我的监视器服务将发生不好的事情.
这里有人可以开导我吗?我的想法是对还是错?如果你知道答案,请清楚解释,因为我很乐意理解它.:)
更新:
感谢到目前为止的响应,事情变得越来越清晰,因为人们正在询问有关该Log方法的更多细节,而且我现在不在我的开发PC上,我将尝试更详细地解释它的工作方式.
所有Log方法都是基于来自一些先前实例化对象的数据通过EF向SQL数据库添加记录,这些对象作为参数传递给方法.数据库上下文被实例化为静态类上的静态私有变量.这样做的原因是我不必在我的重载中继续使用using语句.
坦率地说,我是C#和Asp.net MVC的新手.我也不知道asp.net Web应用程序如何在IIS和ASP.NET框架后面实际工作.
我对我必须在我的asp.net mvc应用程序中声明DbContext(或从DbContext派生的任何类)字段的决定感到困惑.
我有两个选择:
global.asax,以便所有控制器都可以使用它.你能解释哪一个是正确的吗?确实需要更详细的解释.
我最近使用Linq2SQL继承了一个ASP.Net应用程序.目前,它的DataContext对象在每个页面中都声明为static,我在第一次发现它们为null(singleton,sort of)时创建它们.
如果好或坏,我需要评论.在我只需要从DB读取的情况下以及我需要写入的情况下.
如何为整个应用程序只安装一个DataContext实例?
今天,当我从下面的代码运行我的应用程序时出现异常
dbContext.ManageTasks.Where(x => x.IsDeleted == false).ToList();
Run Code Online (Sandbox Code Playgroud)
错误是
超时已过。在从池中获取连接之前超时时间已过。这可能是因为所有池连接都在使用中并且达到了最大池大小。
我从这个讨论中得到了一个解决方案:如何解决 ASP.NET 和 SQL Server 之间的连接池问题?
解决方案是:如果我关闭当前的连接字符串对象,那么这个错误就会消失。
SqlConnection myConnection = new SqlConnection(ConnectionString);
myConnection.Open();
// some code
myConnection.Close();
Run Code Online (Sandbox Code Playgroud)
上面的 ADO.NET 代码,而不是实体框架。
如何关闭实体框架中的连接字符串对象?
c# ×3
asp.net ×2
asp.net-mvc ×2
datacontext ×2
linq-to-sql ×2
.net ×1
class ×1
dbcontext ×1
poco ×1
static ×1
vb.net ×1