【发布时间】:2014-02-27 02:00:49
【问题描述】:
我正在重构许多项目,我想将访问数据库的所有方法组合到一个 DataLayer 库中(而不是每个项目都有自己的访问数据库的类)
这是我现在正在做的方法
private static Database DB = null ;
private static EventLog LOG = null ;
public static void Initialize()
{
string logName;
if (LOG == null)
{
logName = "DataLayer";
LOG = new EventLog();
if (!EventLog.Exists(logName))
{
//can fail because lack of permissions or other errors
try
{
EventLog.CreateEventSource(logName, logName);
}
catch (Exception)
{
}
}
LOG.Source = logName;
}
if (DB == null)
{
DB = DatabaseFactory.CreateDatabase("Name");
}
}
public static DataSet GetInfoFromDB(String param1, bool automatic)
{
DataSet resp;
DbCommand dbCommand;
object[] pars;
resp = null;
dbCommand = null ;
try
{
//prepare the parameters
pars = new object[2];
pars[0] = param1;
pars[1] = automatic;
dbCommand = DB.GetStoredProcCommand("StoredProcedureName", pars);
dbCommand.CommandTimeout = 1200;
resp = DB.ExecuteDataSet(dbCommand);
}
catch (Exception ex)
{
LOG.WriteEntry(string.Format("Error al ejecutar el StoredProcedure \"GetInfoFromDB\" {0}", ex.Message), EventLogEntryType.Error, 2004);
}
finally
{
if (dbCommand!= null)
{
dbCommand.Dispose();
}
}
return resp;
}
对 DataLayer 库使用 de EnterpriseLibrary Database 类的单个静态实例可能会出现哪些问题?
我所说的问题是指连接泄漏,或者当多个进程开始调用这些方法或任何其他方法时,一个方法会以某种方式影响其他方法
我通常会通过试错来解决这个问题,但我想根据概念和技术/官方信息得到答案
添加
DataLayer 的主要目标和我计划的重构是采用所有 DB 实用程序/常用方法,如 GetAllParameters 以及在每个项目中反复复制的许多其他方法,以避免在每个项目中维护和测试它们。
我想要的是一个独特的方法 GetAllParameters 在所有其他项目中被调用/重用
因此,所有可以被许多项目使用且不属于特定业务逻辑的 Common 方法将被放置在 DataLayer.Common 中,如 DataLayer.Common.GetAllParameters
每个特定于特定功能的逻辑都将进入其自己的DataLayer.BusinessLogicA.GetSpecificInfo
值得一提的是,此 DataLayer 将用于此类项目
Website-->WebService-->BusinessLogic-->Datalayer
Winservice-->Datalayer
Winform-->Datalayer
【问题讨论】:
-
@Magnus 该问题有相反的答案,没有提及技术或可信来源
标签: c# enterprise-library enterprise-library-5