在工作中,我们目前有一个非常大的 Web 应用程序,它连接到一个庞大的数据库。我们使用实体框架已经有一段时间了,为了让事情变得更容易,我们将数据库划分为许多实体模型。这对我们来说效果很好,但我们遇到了一个问题。由于连接字符串的元数据部分,每个 EF 模型都需要自己的连接字符串。管理如此多的连接字符串是一件痛苦的事情。
现在我有了一个我认为可行的解决方案。我将创建一个类,它将元数据信息保存为属性,并连接到 web.config 中的标准连接字符串。因此,当我们使用连接字符串“Database.EntityConnectionString”时,它会给我实体连接字符串,但我们只需在 web.config 中管理单个连接字符串。我们仍然需要使用元数据来管理类,但是模型不会发生太大变化,并且我们不会经常创建它们,因此维护应该没问题。我的问题是,有没有更好的方法来处理这个问题,或者你会怎么做?
Thanks!
这就是我解决这个问题的方法:
namespace DBLibrary
{
public enum Models
{
Model1,
Model2
}
public static class Database
{
public static string EntitiesConnectionString(Models model)
{
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["Default"].ConnectionString);
builder["MultipleActiveResultSets"] = true;
builder["Connect Timeout"] = 30;
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
entityBuilder.Provider = "System.Data.SqlClient";
entityBuilder.ProviderConnectionString = builder.ConnectionString;
switch (model)
{
case Models.Model1:
entityBuilder.Metadata = "res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl";
return entityBuilder.ToString();
case Models.Model2:
entityBuilder.Metadata = "res://*/Model2.csdl|res://*/Model2.ssdl|res://*/Model2.msl";
return entityBuilder.ToString();
default:
throw new Exception("Invalid model, no connection string defined");
}
}
}
}
我仍然需要清理代码和所有内容,但我认为这可以让您了解如何实现这一点。如果有不同的、更好的方法来做到这一点,我仍然会非常感兴趣。
Thanks!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)