entity framework获得sql连接

根据entity framework中显式关闭连接和http://msdn.microsoft.com/en-us/library/bb738582%28v=vs.90%29.aspx ,似乎我应该使用上下文来创建连接而不是做以下

using (SqlConnection con = new SqlConnection("Persist Security Info=False;Integrated Security=true;Initial Catalog=Remember;server=(local)")) { ... } 

我的理解是,我会

  • 摆脱连接字符串
  • 利用EF内置的连接池

但是如何通过上下文获取SQL连接?

在EF5(为EF6更改)中,以下将返回连接:

  var connection =((EntityConnection)context.Connection).StoreConnection; 

如果您以正确的方式使用EF,您可能永远不需要获得内部数据库连接。

我发现魔法在于ExecuteStoreCommand()

  new AdventureEntities().ExecuteStoreCommand( @" UPDATE Users SET lname = @lname WHERE Id = @id", new SqlParameter("lname", lname), new SqlParameter("id", id)); 

然后就不需要显式连接,它实际上使代码更加清晰。 上面的单行代码替换了以下所有代码

  using (SqlConnection con = new SqlConnection("Persist Security Info=False;Integrated Security=true;Initial Catalog=Remember;server=(local)")) { con.Open(); using (SqlCommand cmd = con.CreateCommand()) { cmd.CommandText = @" UPDATE Users SET lname = @lname WHERE Id = @id"; cmd.Parameters.AddWithValue("lname", lname); cmd.Parameters.AddWithValue("id", id); cmd.ExecuteNonQuery(); } } 

我使用下一个代码来获取连接(Entity Framework 5.0):

 var connection = Context.Database.Connection; 
 var efConnectionStringBuilder = new EntityConnectionStringBuilder(efConnectionString); string sqlConnectionString = efConnectionStringBuilder.ProviderConnectionString; 

如果EF连接字符串存储在Web配置文件中,则可以使用以下代码将其分配给SQL数据源:

  var connString = ConfigurationManager.ConnectionStrings["MyDataEntities"].ConnectionString; EntityConnection ec = new EntityConnection(connString); var storeConnect = ec.StoreConnection; SqlDataSource1.ConnectionString = storeConnect.ConnectionString; 

您也可以使用以下内容。 我想将一些Dapper.NET注入到已经具有Entity框架实体上下文的现有项目中,因此我创建了以下内容:

 public class EFConnectionAccessor : IDisposable { private readonly SqlConnection sqlConnection; private readonly MyEntities entities; public EFConnectionAccessor() { entities = new MyEntities(); var entityConnection = entities.Connection as EntityConnection; if (entityConnection != null) { sqlConnection = entityConnection.StoreConnection as SqlConnection; } } public SqlConnection connection { get { sqlConnection.Open(); return sqlConnection; } } public void Dispose() { sqlConnection.Close(); sqlConnection.Dispose(); entities.Dispose(); } } 

叫做使用

 using (SqlConnection sqlConnection = new EFConnectionAccessor().connection) { // ADO.NET CODE HERE - Or in my case dapper.net } 

我相信在EF6中创建SqlConnection的最简单方法是执行以下操作:

 DBContext context = new DBContext(); SqlConnection sqlconn = new SqlConnection(context.Database.Connection.ConnectionString); 

DataContext允许您直接从DataContext引用调用实体对象,抽象出基础连接后勤的所有细节。