Bob*_*way 27 .net entity-framework
创建新的EntityCollection对象时,在尝试对该集合执行某些操作之前,连接不会尝试打开数据库.我需要确定实体集合是否具有有效连接,我找不到有效的方法.
目前我的代码中有这个:
var db = new MyEntityCollection();
try
{
var checkworking = from c in db.Customers select c;
}
catch
{
ConnectToBackUp();
}
Run Code Online (Sandbox Code Playgroud)
这不仅是可怕的代码,而且非常慢,因为它在抛出异常之前等待一个年龄来确定连接是否处于活动状态.
我知道我可以通过使用ConnectionTimeout来控制它在放弃之前等待多长时间,但这只是另一个丑陋的黑客行为,这使得糟糕的情况变得更糟.
当然有更好的方法吗?
Gia*_*tti 31
最简单的:
private bool TestConnection()
{
var db = new MyEntityCollection();
int oldTimeOut = db.CommandTimeout;
try
{
db.CommandTimeout = 1;
db.Connection.Open(); // check the database connection
return true;
}
catch
{
return false;
}
finally
{
db.CommandTimeout = oldTimeOut;
}
}
Run Code Online (Sandbox Code Playgroud)
EF6更新:
using System.Data.Common;
...
public bool TestConnection() {
using (var db = new MyEntityCollection()) {
DbConnection conn = db.Database.Connection;
try {
conn.Open(); // check the database connection
return true;
}
catch {
return false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
Stu*_*ing 11
您只是想查看数据库连接是否有效.如果有的话,看看objectcontext.databaseExists()
.
通过绕过房子并构建一个新的连接字符串以使用ADO进行测试解决了这个问题.仍然需要使用try catch但速度要快得多:
private bool TestConnection()
{
EntityConnectionStringBuilder b = new EntityConnectionStringBuilder();
ConnectionStringSettings entityConString = ConfigurationManager.ConnectionStrings["MyEntityConnectionString"];
b.ConnectionString = entityConString.ConnectionString;
string providerConnectionString = b.ProviderConnectionString;
SqlConnectionStringBuilder conStringBuilder = new SqlConnectionStringBuilder();
conStringBuilder.ConnectionString = providerConnectionString;
conStringBuilder.ConnectTimeout = 1;
string constr = conStringBuilder.ConnectionString;
using (SqlConnection conn = new SqlConnection(constr))
{
try
{
conn.Open();
return true;
}
catch
{
return false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
28477 次 |
最近记录: |