繁体   English   中英

连接字符串,以同时使用“模型”和“ DB”用于同一数据库,

[英]connection string to use both Model first, DB first for same database,

在Asp.net实体框架中,对于同一个数据库,我们首先使用Model,首先使用DB,并且首先使用DB,首先使用两个连接字符串。 因此,我们如何为Model首先,DB首先创建单个连接字符串。

连接字符串将有所不同:第一个数据库的开头将具有元数据[embedded]位置。 您可以使用静态方法来构建所需的EntityConnectionString,将“正常”的Code First连接字符串放在web.config中,并在DB First DbContext构造函数中添加“元数据部分”。

例:

public MyContext() : base(BuildConnectionString())
{
}

private static string BuildConnectionString()
{
  varsqlBuilder = new SqlConnectionStringBuilder();
  //dinamically prepare the provider connection string here, using the CF one in the web.config 
  //[..]

  //now build the entity connection string, using the one just built as ProviderConnectionString
  var entityBuilder = new EntityConnectionStringBuilder();
  entityBuilder.ProviderConnectionString = sqlBuilder.ToString();
  entityBuilder.Metadata = "res://*/";
  entityBuilder.Provider = "System.Data.SqlClient";

  return entityBuilder.ToString();
}

您可以使用EntityConnectionStringBuilder

string sqlConnectionString = "Data Source=localhost;
     Initial Catalog=AdventureWorks;Integrated Security=True;Connection Timeout=60;multipleactiveresultsets=true"

string providerName = "System.Data.SqlClient";    

EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
entityBuilder.Provider = providerName;
entityBuilder.ProviderConnectionString = sqlConnectionString;
entityBuilder.Metadata = @"res://*/AdventureWorksModel.csdl|
                        res://*/AdventureWorksModel.ssdl|
                        res://*/AdventureWorksModel.msl";

string entityConnectionString = entityBuilder.ToString();

或者,如果您足够勇敢,则可以尝试重新格式化entityConnectionString:

string sqlConnectionString = "Data Source=localhost;
     Initial Catalog=AdventureWorks;Integrated Security=True;Connection Timeout=60;
     multipleactiveresultsets=true"

string entityConnectionString = 
  string.Format("metadata=.\AdventureWorks.csdl|.\AdventureWorks.ssdl|.\AdventureWorks.msl; provider=System.Data.SqlClient;provider connection string='{0}'" providerName=\"System.Data.EntityClient\"",
    sqlConnectionString
 );

编辑:

另外,您可以采取相反的方法,让EntityConnectionString并从中提取SqlConnectionString:

string entityConnectionString = 'xxxxxxx';
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder(entityConnectionString);

string sqlConnectionString = entityBuilder.ProviderConnectionString;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM