Det*_*ium 3 c# wcf design-patterns entity-framework
我正在尝试使用Entity Framework向我的DbContext添加单例模式.我总是使用单例模式,之前从未遇到过这个错误.我知道单身人士是最佳做法 (显然不是),但如果你们有时间有空,你能否解释为什么单身人士是最佳做法?
问题
除此之外,我收到此错误:
底层提供程序在打开时失败
我们来看看我的代码吧
DAO.cs
public class DAO
{
private static HourRegistrationEntities hourRegInstance;
public static HourRegistrationEntities HourRegInstance { get { return hourRegInstance = hourRegInstance ?? new HourRegistrationEntities(); } }
}
Run Code Online (Sandbox Code Playgroud)
Service.cs(示例方法)
/// <summary>
/// Return a list of all denied Hour Registration for the Login with the given stringId
/// </summary>
/// <param name="stringId"></param>
/// <returns>A list of HourRegistrationDTO</returns>
public List<HourRegistrationDTO> GetAllDeniedHoursForLogin(string stringId)
{
var id = Int32.Parse(stringId);
using (var db = DAO.HourRegInstance)
{
var dbHours = db.HourRegistration.Where(x => x.LoginProject.Login.ID == id && x.Denied == true).ToList();
var returnList = new List<HourRegistrationDTO>();
foreach (var item in dbHours)
{
returnList.Add(new HourRegistrationDTO()
{
Id = item.ID,
Hours = item.Hours,
Date = item.Date.ToShortDateString(),
Comment = item.Comment,
CommentDeny = item.CommentDeny,
LoginProject = new LoginProjectDTO()
{
Project = new ProjectDTO()
{
Title = item.LoginProject.Project.Title
}
}
});
}
return returnList;
}
}
Run Code Online (Sandbox Code Playgroud)
如上所述,我总是使用单例模式,但以前从未遇到此错误.造成这种情况的原因是什么?为什么?
更新:
我基本上喜欢这样(下面的代码),因为这解决了问题.现在我对导致错误的原因更加好奇.
Service.cs
using (var db = new HourRegistrationEntities())
Run Code Online (Sandbox Code Playgroud)
它不起作用的原因是你的using子句在首次使用后处理你的单例实例.在那之后,它变得无用,处置但仍然不为空.
事实上,你坚持你总是使用单身而且它总是有效并不是真的意味着什么.使用数据的上下文单身被认为是一个非常不好的习惯,导致许多问题,包括内存,并发性和交易问题.
我的猜测是,之前,你总是在单线程桌面应用程序的工作,在那里一个单身还是有风险的,但不会导致紧迫的问题.然而,在这里,在Web服务的并发世界中,它将无法工作.
在另一方面,每一个WCF调用创建一个新的实例是非常有效的,不同的情况下,不会干扰你正确处理它们使用后.
| 归档时间: |
|
| 查看次数: |
7709 次 |
| 最近记录: |