我试图尝试连接到SQL服务器时尝试在EF 6中尝试捕获,这样我不仅可以记录错误消息,还可以向用户发出明确的消息,说明"有一个连接数据库时出错。请联系您的系统管理员"。
原因是我不想向用户显示从EF收到的长卷错误消息
"访问数据库时出错。这通常意味着 与数据库的连接失败。检查连接字符串是否为 更正并且正在使用适当的DbContext构造函数 指定它或在应用程序的配置文件中找到它。看到 http://go.microsoft.com/fwlink/?LinkId=386386了解有关的信息 DbContext和连接。有关详细信息,请参阅内部异常 。失败"
以下是我的代码:
namespace MyRepositories.MSSQL.DatabaseContext
{
public class MyDbContext : DbContext
{
public MyDbContext()
: base("name=MyConnection")
{
}
public virtual IDbSet<DBConnection> DBConnections { get; set; }
public virtual IDbSet<CustomerAction> CustomerActions { get; set; }
public virtual DbSet<Action> Actions { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
}
}
}
存储库中的代码如下:
namespace myRepositories.MSSQL
{
public class AccRepository : BaseRepository, IAccRepository
{
public AccountsRepository(MyDbContext dbContext)
{
_databaseContext = dbContext;
}
public IQueryable<Role> GetRoles()
{
var roles = _databaseContext.Roles.AsQueryable();
return roles;
}
public IQueryable<UserRole> GetUserRoles()
{
var userRoles = _databaseContext.UserRoles.AsQueryable();
return userRoles;
}
public List<RolePermission> GetRolePermissions(Role role)
{
var rolePermissions = _databaseContext.RolePermissions.Where(s => s.RoleID == role.RoleID).ToList();
return rolePermissions;
}
public List<UserRole> GetUserRoles(UUser user)
{
var userRoles = _databaseContext.UserRoles.Where(s => s.UserID == user.UserID);
return userRoles.ToList();
}
}
}
执行此操作的另一个原因是此dbcontext连接到SQL服务器,由于各种原因多次不可用(我知道修复SQL服务器会更好,但它不属于我们和第三方所有者不愿意修理它)
此外,我不想在上面提到的每个存储库方法周围放置一个try catch块(这只是我上面说过的一个repo代码,我们为这个SQL数据库服务器提供了另外20个不同的存储库)
我现在搜索了很多网页,无法找到任何相关内容,因此如果有人帮我解决这个问题,我将非常感激。
答案 0 :(得分:-1)
DbContext是ObjectContext的包装器,在访问repo之前检查这个How to: Manually Open the Connection from the Object Context还是创建一个代理类来实例化repo?
using (AdventureWorksEntities context =
new AdventureWorksEntities())
{
context.Connection.Open();
或检查数据库是否存在Database.Exists
Method
只需使用存在
if (myDbContext.Database.Exists()){
// call your operation here
}