实体框架获得SQL连接

Car*_*ngo 11 c# 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)"))
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

我的理解是,我会

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

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

Lad*_*nka 19

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

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

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

  • EF6中的@RomanPokrovskij可以使用`context.Database.Connection` (4认同)
  • 自EF6以来删除了context.Connection (3认同)

Car*_*ngo 9

我发现魔法在于ExecuteStoreCommand()

  new AdventureEntities().ExecuteStoreCommand(
        @"    UPDATE Users
              SET lname = @lname 
              WHERE Id = @id",
        new SqlParameter("lname", lname), new SqlParameter("id", id));
Run Code Online (Sandbox Code Playgroud)

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

  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();
    }
  }
Run Code Online (Sandbox Code Playgroud)


小智 9

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

var connection = Context.Database.Connection;
Run Code Online (Sandbox Code Playgroud)


Vut*_* L. 7

var efConnectionStringBuilder = new EntityConnectionStringBuilder(efConnectionString);
string sqlConnectionString = efConnectionStringBuilder.ProviderConnectionString;
Run Code Online (Sandbox Code Playgroud)


Bri*_*ott 5

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

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

            SqlDataSource1.ConnectionString = storeConnect.ConnectionString;
Run Code Online (Sandbox Code Playgroud)