我们有一个与实体框架一起工作的ASP.NET MVC web应用程序。到目前为止,一切都运行得很好,但现在我需要实现一个函数,该函数允许将大量数据导入存档表。
我需要导入的数据是一个文件,我可以通过web应用程序上传和处理该文件。我的第一次尝试是读取行并为每一行创建新对象,我将其添加到该类型的列表中。然后,我使用EF的AddRange()方法将行添加到数据库。
由于内存和性能问题,该方法无法工作,即使是对小型导入文件也是如此。因此,我谷歌了一下,决定选择SQL大容量插入(从而绕过EF),这显然是最具表现力的方式。
在我的web.config中,我有EF连接字符串,它还包含访问数据库所必需的数据。因为我需要使用SqlConnection,所以我确实需要一个工作的SQLProvider ConnectionString。在这种情况下,EF连接字符串无法工作,因为SqlConnection不处理其他条目(导致诸如“不支持的关键字:元数据”等错误)。
因此,我想用一个SqlConnection构建一个新的SqlConnectionStringBuilder连接字符串。我只需要三个参数: UserID、密码和DataSource。所有这些都存在于EF连接字符串中。
如何从我现有的EF连接中获得它们?我绝对不想要一些丑陋的解析/重新定义,但我不知道如何获得这些值。
发布于 2015-04-20 10:31:41
您可以尝试将EntityConnection直接转换为SqlConnection。这也将使您访问您需要的信息。
using (var ec = new EntityConnection(connstr.ConnectionString))
{
var sqlConn = ec.StoreConnection as SqlConnection;
sqlConn.Open();
var dataSource = sqlConn.DataSource;
var userId = sqlConn.Credential.UserId;
var password = sqlConn.Credential.Password;
}发布于 2016-07-18 14:22:45
尽管这是一个老问题,但我在贴出一个回复,希望其他人可能会发现这是有用的。
接受的答案可能不利于那些不想仅仅为了获取数据源、用户凭据等属性而打开连接的人。
我就是这样做的:
Web.Config文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="Genus_Connection_String" connectionString="metadata=res://*/GenusEFModel.csdl|res://*/GenusEFModel.ssdl|res://*/GenusEFModel.msl;provider=System.Data.SqlClient;provider connection string="data source=D-SQL203;initial catalog=Genus_AIS_TaskDev_SB4;integrated security=True;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient"/>
</connectionStrings>
</configuration>检索连接字符串的代码:
static void Main(string[] args)
{
ConnectionStringSettings genusSettings = ConfigurationManager.ConnectionStrings["Genus_Connection_String"];
if (genusSettings == null || string.IsNullOrEmpty(genusSettings.ConnectionString))
{
throw new Exception("Fatal error: Missing connection string 'Genus_Connection_String' in web.config file");
}
string genusConnectionString = genusSettings.ConnectionString;
EntityConnectionStringBuilder entityConnectionStringBuilder = new EntityConnectionStringBuilder(genusConnectionString);
SqlConnectionStringBuilder sqlConnectionStringBuilder = new SqlConnectionStringBuilder(entityConnectionStringBuilder.ProviderConnectionString);
string genusSqlServerName = sqlConnectionStringBuilder.DataSource;
string genusDatabaseName = sqlConnectionStringBuilder.InitialCatalog;
Console.WriteLine("genusSqlServerName = " + genusSqlServerName);
Console.WriteLine("genusDatabaseName = " + genusDatabaseName);
Console.ReadLine();
}如果要在连接字符串中设置用户If和密码,则可以按以下方式检索它们:
string userID = sqlConnectionStringBuilder.UserID;
string password = sqlConnectionStringBuilder.Password;https://stackoverflow.com/questions/29745214
复制相似问题