我设计了框架的数据访问部分,以便每次业务对象(BO)需要与数据库交互时,都必须打开连接,调用数据访问层(执行查询),然后关闭连接.然后,如果需要在事务中运行,它将打开连接,开始事务,调用数据访问层(执行查询),然后提交事务,关闭事务,最后关闭连接.
我这样做的方式是"开放晚,早关闭" ...但是如果我需要调用其他BO在单个交易中提交数据怎么办?有没有更好的方法来处理打开和关闭连接以及处理事务?
我是设计应用程序架构的新手,所以我希望我不会错误地做这个......任何帮助都是值得赞赏的.
我有一个Devart DLL没有被复制到我的web应用程序的bin文件夹的问题.我有一个引用projectA的web应用程序项目.ProjectA引用projectB.Devart Dlls在projectB中使用,并且在构建期间不会被复制到Web应用程序项目bin文件夹中.ProjectB还引用了EL Unity dll,它们正在被正确复制.所讨论的所有Dll都物理上位于projectB中的文件夹中,这是参考点的位置.(我没有指向GAC的引用)
正确复制的dll是Microsoft.Practices.Unity,Microsoft.Practices.Unity.Configuration和Microsoft.Practices.ServiceLocation.
未正确复制的dll是Devart.Data,Devart.Data.Oracle和Devart.Data.Oracle.Design.
这是每个dll的参考资料......
<Reference Include="Devart.Data, Version=5.0.124.0, Culture=neutral, PublicKeyToken=09af7300eec23701, processorArchitecture=MSIL">
<HintPath>..\Dtn.PetroDex.Dal\ThirdPartyDlls\Devart.Data.dll</HintPath>
<SpecificVersion>False</SpecificVersion>
<Private>True</Private>
</Reference>
<Reference Include="Devart.Data.Oracle, Version=5.70.170.0, Culture=neutral, PublicKeyToken=09af7300eec23701, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Dtn.PetroDex.Dal\ThirdPartyDlls\Devart.Data.Oracle.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Devart.Data.Oracle.Design, Version=5.70.170.0, Culture=neutral, PublicKeyToken=09af7300eec23701, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Dtn.PetroDex.Dal\ThirdPartyDlls\Devart.Data.Oracle.Design.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.Practices.ServiceLocation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\Dtn.PetroDex.Dal\ThirdPartyDlls\Microsoft.Practices.ServiceLocation.dll</HintPath>
<SpecificVersion>False</SpecificVersion>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.Practices.Unity, Version=2.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\Dtn.PetroDex.Dal\ThirdPartyDlls\Microsoft.Practices.Unity.dll</HintPath>
<SpecificVersion>False</SpecificVersion>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.Practices.Unity.Configuration, Version=2.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\Dtn.PetroDex.Dal\ThirdPartyDlls\Microsoft.Practices.Unity.Configuration.dll</HintPath>
<SpecificVersion>False</SpecificVersion>
<Private>True</Private>
</Reference>
Run Code Online (Sandbox Code Playgroud)
还有谁有相同的问题吗?我做错了吗?谢谢
编辑我打开了一个文件监视器,观察了visual studio加载引用的位置,对于Unity来说,它是从我指定的位置获取dll.但是,对于Devart dll来说,它正在寻找GAC!Devart dlls能以某种方式造成这种情况吗?
我有一个ac #windows服务,需要每60秒执行一次数据库查询(或者在配置文件中设置任何间隔).我在while循环中使用Thread.sleep(60)来完成此任务.有一个更好的方法吗?
谢谢
您是否应该在关闭连接之前关闭DataReader,还是可以关闭连接?只需关闭连接就可以有效地关闭读卡器?
(这是针对c#.net 3.5)
谢谢!
我有两个问题.
1)您是否应始终在连接上使用using语句?那么,我会在连接上使用它,然后在连接中的读者上使用另一个?所以我将使用两个using语句.
2)假设您在连接上使用using语句,并且还在连接上返回读取器.所以你有两个使用语句.它会创建两个Try {} Finally {}块还是只创建一个?
谢谢!
在WCF中,绑定设置maxConnections和ServiceBehaviors serviceThrottling设置(maxConcurrentCalls,maxConcurrentInstances,maxConcurrentSessions)之间的区别是什么?
我正在尝试设置我的WCF服务,但我不确定这些服务是如何相互配合来限制连接的.
我们发现我们的一个 WCF 应用程序出现内存泄漏,我想知道是否有人可以为我澄清一些事情。我使用 windbg 运行了 !finalizequeue,它将每个堆集中的数千个对象显示为“准备好完成”。
Heap 0
generation 0 has 464 finalizable objects (0000000033877190->0000000033878010)
generation 1 has 52 finalizable objects (0000000033876ff0->0000000033877190)
generation 2 has 19958 finalizable objects (0000000033850040->0000000033876ff0)
Ready for finalization 228791 objects (0000000033878010->0000000033a36dc8)
------------------------------
Heap 1
generation 0 has 1508 finalizable objects (000000002ee2e168->000000002ee31088)
generation 1 has 91 finalizable objects (000000002ee2de90->000000002ee2e168)
generation 2 has 23498 finalizable objects (000000002ee00040->000000002ee2de90)
Ready for finalization 249421 objects (000000002ee31088->000000002f0182f0)
------------------------------
Heap 2
generation 0 has 66 finalizable objects (00000000292660d0->00000000292662e0)
generation 1 has 63 finalizable …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个通用方法在我的基类中用于我的存储库,我遇到了问题.这是方法......
public virtual T First(System.Linq.Expressions.Expression<Func<T, bool>> where, List<string> properties)
{
IQueryable<T> query = null;
if (where != null)
{
query = _context.CreateQuery<T>(String.Format("[{0}]", typeof(T).Name.ToString())).Where(where);
}
else
{
query = _context.CreateQuery<T>(String.Format("[{0}]", typeof(T).Name.ToString()));
}
foreach (string s in properties)
{
query = query.Include(s);
}
T _result = (T)query.First();
return _result;
}
Run Code Online (Sandbox Code Playgroud)
当我运行代码时,它给了我这个错误:
无法在当前范围或上下文中解决"公司"问题.确保所有引用的变量都在范围内,加载了所需的模式,并正确引用了名称空间.近似转义标识符,第1行,第1列.
我知道它为什么这样做,我只是不知道如何解决它.我认为它正在这样做,因为我的ObjectContext不知道对象"公司",但它确实知道"公司".有想法该怎么解决这个吗??
错误发生在这一行:
T _result =(T)query.First();
谢谢!
.net ×7
c# ×5
ado.net ×1
clr ×1
connection ×1
datareader ×1
dll ×1
finalization ×1
reference ×1
service ×1
transactions ×1
wcf ×1
windbg ×1
windows ×1