在EntityFramework
以Code First
方式创建数据库之前,我需要验证Data Source
,UserId
和Password
。此时,没有数据可用于测试连接。我的目标是为产品配置connectionString,并为用户修改web.config
。所以我需要一种方法来验证配置是否有效。尤其是Data Source
,UserId
和Password
的准确性。
因此,我希望测试SQL Server的连接,并且SQL Server可能根本没有任何数据库。我需要测试关于Data Source
,UserId
和Password
的连接能力。如果某些参数无效,则应向用户显示错误消息。
所以,我需要以下功能。
Data Source
,UserId
和Password
由用户输入决定。答案 0 :(得分:0)
我用EntityFramework写了一个简单的Database model
,创建了用于测试,并在最后删除了数据库。 connectionString由程序组成,因此TestDbContext
应接受DbConnection
参数。
public class Test
{
public long Id { get; set; }
public string Field { get; set; }
}
public class TestDbContext : DbContext
{
public DbSet<Test> TestSet { get; set; }
public TestDbContext() {}
/// For self-composed connection string.
public TestDbContext(DbConnection conn) : base(conn, true) {}
}
然后,connectionString
可以由SqlConnectionStringBuilder
组成,System.Data.SqlClient
用于SqlConnection
数据提供者。 DbConnection
是sb
的子类,它接受SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder();
sb.DataSource = ...; //< The `Data Source` parameter
// The `InitialCatalog` parameter.
// Create an unique database for testing. And avoid name confliction.
sb.InitialCatalog = "testing" + Guid.NewGuid().ToString("N");
sb.UserID = ...; //< The `UserId`
sb.Password = ...; //< The `Password` of `UserId`.
sb.MultipleActiveResultSets = true;
SqlConnection dbConn = new SqlConnection(sb.ToString());
// dbConn.Open();
// It will be failed when the database had not been created.
// But, I need to verify the db server, account and password,
// no matter whether the database is created or not.
生成的字符串。
EntityFramework
然后,按// Test by self-composed connection string.
using (TestDbContext db = new TestDbContext(dbConn))
{
// Create database.
// If failed to connect to the database server, it will throw an exception.
db.Database.CreateIfNotExists();
// Insert an item.
var item = new Test() { Field="Hello World!!"};
db.TestSet.Add(item);
db.SaveChanges();
// Delete database after testing
db.Database.Delete();
}
测试连接。这很方便。
{{1}}