如何以编程方式在Entity Framework 6中为MS SQL创建连接字符串?

如何以编程方式在Entity Framework 6中为MS SQL创建连接字符串?

我正在使用c#和WPF,我想知道是否有人可以告诉我如何或链接我一个资源,显示如何在EF 6中以编程方式设置连接字符串.MSDN文章解释说你可以http://msdn.microsoft #com / en-us / data / jj680699#moving但它不会创建实际的连接字符串。

所以这是一个有效的EF6示例

App.Config中

entityFramework codeConfigurationType =“WPFwithEF.SqlConfiguration,WPFwithEF”> / entityFramework

上下文

public class ProductContext : DbContext { public ProductContext():base("Wpf") { } public DbSet Categories { get; set; } public DbSet Products { get; set; } } 

Configuration.cs

 namespace WPFwithEF { public class SqlConfiguration : DbConfiguration { public SqlConfiguration() { SetProviderServices(SqlProviderServices.ProviderInvariantName,SqlProviderServices.Instance); SetDefaultConnectionFactory(new SqlConnectionFactory()); } } } 

但如果上下文基础是“name = Wpf”,那么这个设置不起作用是否有办法使其工作? 而我正在寻找最新的EF6而不是旧的方式。

您可以使用EntityConnectionStringBuilder如下所述: 如何:构建EntityConnection连接字符串

如果您专门连接到MS Sql数据库,这应该工作:

 private DbConnection CreateConnection(string connectionString) { return new SqlConnection(connectionString); } private string CreateConnectionString(string server, string databaseName, string userName, string password) { var builder = new SqlConnectionStringBuilder { DataSource = server, // server address InitialCatalog = databaseName, // database name IntegratedSecurity = false, // server auth(false)/win auth(true) MultipleActiveResultSets = false, // activate/deactivate MARS PersistSecurityInfo = true, // hide login credentials UserID = userName, // user name Password = password // password }; return builder.ConnectionString; } 

如何使用:

 public void ConnectoToDbWithEf6() { using(var connection = CreateConnection(CreateConnectionString("server", "db", "you", "password") { using(var context = new YourContext(connection, true)) { foreach(var someEntity in context.SomeEntitySet) { Console.WriteLine(someEntity.ToString()); } } } } 

请参阅https://msdn.microsoft.com/en-Us/library/system.data.sqlclient.sqlconnectionstringbuilder%28v=vs.100%29.aspx

我以前使用在app.config(或web.config)中找到的DefaultConnection字符串作为示例,只是将DbContext上的“connectionstring”替换为我想要的那个。

连接字符串看起来像:

 Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-ShoppingList.Web-20150903103641.mdf;Initial Catalog=aspnet-ShoppingList.Web-20150903103641;Integrated Security=True 

如果我记得正确的话,你应该替换以下的连接字符串:

 DbContext.Database.Connection.Connectionstring 

PS。 如果您使用的是Code-First,则只能以这种方式使用它。 如果您使用的是Model-First或Database-First,则应使用EntityConnectionStringBuilder。

您可以使用ConnectionStringPT nuget包。 它有3种方法:

  • 创建没有数据库名称的服务器连接字符串
  • 使用数据库名称创建到服务器的连接字符串
  • 为EntityFramework数据库上下文创建连接字符串

最后一种方法适合您,并且假设您的edmx在调用后被命名为Product

 ConnectionStringHelper.ConnectionString.GetSqlEntityFrameworkConnectionString ("serverName", "databaseName", "Product"); 

套餐将返回:

 metadata=res://*/Product.csdl|res://*/Product.ssdl| res://*/Product.msl; provider=System.Data.SqlClient;provider connection string="Data Source=serverName; Initial Catalog=databaseName;Integrated Security=True" 

我今天调查了这个问题。 在我看来,上面没有提到最简单的解决方案。

为什么不使用SqlConnectionStringBuilder类? (使用System.Data.SqlClient)

这里有一个简单的例子如何使用它。

  SqlConnectionStringBuilder sqlb = new SqlConnectionStringBuilder(getConnectionString(DATABASENAME); using (SqlConnection connection = new SqlConnection(sqlb.ConnectionString)) ... ) // works for EF Core, should also work for EF6 (haven't tried this) private static string getConnectionString(string databaseName) { return "Data Source=SQLSERVERNAME;Initial Catalog="+databaseName+";Integrated Security=True"; }