Entity Framework получает соединение SQL - PullRequest
11 голосов
/ 13 марта 2011

В свете Закрытие соединений явно в 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 через контекст?

Ответы [ 8 ]

19 голосов
/ 13 марта 2011

В EF5 (изменено для EF6) следующее будет возвращать соединение:

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

Если вы используете EF правильно, вам, вероятно, никогда не понадобится внутреннее соединение с БД.

9 голосов
/ 05 мая 2014

Я использовал следующий код для получения соединения (Entity Framework 5.0):

var connection = Context.Database.Connection;
9 голосов
/ 13 марта 2011

Я обнаружил, что магия заключается в 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();
    }
  }
6 голосов
/ 29 апреля 2015
var efConnectionStringBuilder = new EntityConnectionStringBuilder(efConnectionString);
string sqlConnectionString = efConnectionStringBuilder.ProviderConnectionString;
5 голосов
/ 01 августа 2014

Если строка подключения EF хранится в вашем файле веб-конфигурации, вы можете назначить ее источнику данных SQL с помощью этого кода:

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

            SqlDataSource1.ConnectionString = storeConnect.ConnectionString;
1 голос
/ 18 августа 2017

Я считаю, что самый простой способ создать SqlConnection в EF6 - это сделать следующее:

DBContext context = new DBContext();
SqlConnection sqlconn = new SqlConnection(context.Database.Connection.ConnectionString);
1 голос
/ 27 марта 2013

Вы также можете использовать следующее.Я хотел внедрить несколько Dapper.NET в существующий проект, который уже имел контекст сущности Entity Framework, поэтому я создал следующее:

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
}
0 голосов
/ 13 марта 2011

DataContext позволит вам вызывать ваши Entity Objects сразу же из вашей ссылки на DataContext, абстрагируя все детали базовой логистики соединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...