如果您指的是app.config 的数据,那很简单!你必须使用这两个类:
EntityConnectionStringBuilder
https://msdn.microsoft.com/en-us/library/system.data.entityclient.entityconnectionstringbuilder(v=vs.110).aspx
和
SqlConnectionStringBuilder
https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnectionstringbuilder(v=vs.110).aspx
我从这个页面学习它:Programmatic Connection Strings in Entity Framework 6 这是非常好的指南。无论如何,该链接对您没有帮助!?只是谷歌这样的东西:
C#在运行时定义连接字符串
将所有连接字符串放入代码后,您可以从app.config 文件的connectionStrings 标记中删除任何敏感数据,因为您的应用将不再使用它!然后再次编译你的代码。
如果您在 EF 中使用 DB First,那么您也可以查看本指南:How to set Connection String with Entity Framework
更新:
我添加了两个我管理的类,并用它们以编程方式(动态)创建连接字符串,一个属于我使用的实体框架项目SQL Server Compact Edition(SQL Server CE),第二个属于另一个实体我使用带有 SQL Server 身份验证的 SQL Server Express 2014 的框架项目(使用 sa 用户名)。如果有人需要,我将把这两种方法都留在这里:
这属于我的 SQL Server CE 项目:
public static string GetDBConnectionString(string dataParentPath = "")
{
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
SqlCeConnectionStringBuilder sqlCEBuilder = new SqlCeConnectionStringBuilder();
if (string.IsNullOrEmpty(dataParentPath) == true)
dataParentPath = @"C:\MyDBFolder\CMS.sdf";
sqlCEBuilder.DataSource = dataParentPath;
sqlCEBuilder.Password = "12345687";
sqlCEBuilder.MaxDatabaseSize = 4090;
entityBuilder.Metadata = "res://*/CMS.csdl|res://*/CMS.ssdl|res://*/CMS.msl";
entityBuilder.ProviderConnectionString = sqlCEBuilder.ToString();
entityBuilder.Provider = "System.Data.SqlServerCe.4.0";
return entityBuilder.ToString();
}
这属于我的带有 SQL Server 身份验证的 SQL Server Express 项目:
using System;
using System.Collections.Generic;
using System.Data.Entity.Core.EntityClient;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CMS
{
class mySettings
{
public static string GetDBConnectionString()
{
// **************************************************
// This is my "ConnectionString" from App.config file.
// <connectionStrings>
// <add name="CMSEntities"
// connectionString=
// "metadata=res://*/CMS.csdl|res://*/CMS.ssdl|res://*/CMS.msl
// ;provider=System.Data.SqlClient
// ;provider connection string="
// ;data source=MY-PC\SQLEXPRESS
// ;initial catalog=CMS
// ;user id=sa
// ;password=12345687
// ;MultipleActiveResultSets=True
// ;App=EntityFramework
// ""
// providerName="System.Data.EntityClient" />
//</connectionStrings>
// **************************************************
string metaData = "res://*/CMS.csdl|res://*/CMS.ssdl|res://*/CMS.msl";
string providerName = "System.Data.SqlClient";
string dataSource = @"MY-PC\SQLEXPRESS";
string databaseName = "CMS"; // = InitialCatalog
string userID = "sa";
string password = "12345687";
string appName = "EntityFramework";
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder();
// = = = = = = = = = = = = = = = =
sqlBuilder.DataSource = dataSource;
sqlBuilder.InitialCatalog = databaseName;
sqlBuilder.MultipleActiveResultSets = true;
sqlBuilder.UserID = userID;
sqlBuilder.Password = password;
sqlBuilder.ApplicationName = appName;
// = = = = = = = = = = = = = = = =
entityBuilder.Provider = providerName;
entityBuilder.Metadata = metaData;
entityBuilder.ProviderConnectionString = sqlBuilder.ConnectionString;
return entityBuilder.ToString();
}
}
}
如您所见,我在两个项目中的数据库具有相同的名称“CMS”,因此其实体将命名为“CMSEntities”。现在! 你必须重写它的DbContext 构造函数。这是重要但最简单的部分!比我更好的描述来自这个页面“http://www.cosairus.com/Blog/2015/3/10/programmatic-connection-strings-in-entity-framework-6”:
现在您的实体模型从 DbContext 扩展而来,而 DbContext 提供了一个
构造函数传入连接字符串,但您的实体模型确实如此
不要为您重载那些构造函数。为了访问
构造函数重载,您将需要为
您的实体模型数据库上下文与您在同一命名空间中
具有所需构造函数签名的实体模型。专业提示:一定要
将 cs 文件的文件名命名为与实体不同的名称
在未来生成的代码发生的情况下建模数据库上下文
不要覆盖您的更改。
所以我在我的项目的 root 建立了一个类,该类必须是partial:
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CMS // Your Project Namespace
{
public partial class CMSEntities : DbContext
{
public CMSEntities(string connectionString)
: base(connectionString)
{
}
}
}
每当我想访问我的数据库时,我都会使用此代码:
using (CMSEntities db = new CMSEntities(CMSSettings.GetDBConnectionString()))
{
// Do your DB stuff here...
}
我希望它能帮助你或其他我从这个网站“stackoverflow”和用户那里学到的所有东西。
祝你好运