3

Я пытаюсь стандартизировать некоторый код доступа к данным с моими коллегами. Один из вышеупомянутых коллег утверждает, что блок доступа к данным EntLib пытается кэшировать параметры для хранимых вызовов proc.Параметры кэширования корпоративных библиотек в хранимых процедурах?

У меня есть взгляд в отражателе, и есть некоторые доказательства того, что он может их кэшировать. Но я не думаю он делает в следующей ситуации.

public Dictionary<long, string> GetQueue(int maxItems) 
    { 
     var sq = new SqlDatabase(_connString.ConnectionString); 

     var result = new Dictionary<long, string>(); 

     using (var cmd = (SqlCommand)sq.GetStoredProcCommand("dbo.GetQueue")) 
     { 
      sq.AddInParameter(cmd, "maxItems", DbType.Int32, maxItems); 

      var reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 

      while (reader.Read()) 
      { 
       long id = reader.GetInt64(reader.GetOrdinal("id")); 
       string fileName = reader.GetString(reader.GetOrdinal("meta_data_filename")); 

       result.Add(id, fileName); 
      } 
     } 

     return result; 
    } 

Может кто-нибудь подтвердить или опровергнуть это?

Я использую EntLib 4.1

+1

Кстати, нет необходимости использовать отражатель, чтобы увидеть, EntLib поставляется со всем исходным кодом , Вы можете установить источник и шаг вправо. :) –

+0

Хорошая оценка! Я проверю это. –

ответ

3

Он определенно использовал, я разорвал код, и бросил в в моей библиотеке.

он использовал sp_help и проанализировал выход для определения типов данных.

В эти дни я разорвал код, .Net намного лучше добавляет параметры.

cmd.Parameters.AddWithValue("@name",somevalue) 

в вашем примере вы держите reflectoring ... вы найдете это делаются по этому пути GetStoredProcCommand()

вы получите объект Command назад, уже заселен с параметрами

лор Lib код защищен авторским правом, но код практически идентичен этому

http://code.google.com/p/dbdotnet/source/browse/trunk/ParameterCache.cs

+0

Корпоративная библиотека выпущена в рамках [Microsoft Public License] (http://msdn.microsoft.com/en-us/library/ff649118.aspx), поэтому код может быть использован/скопирован/изменен/распространен с учетом ограничений лицензии (которые кажутся довольно разумными). –

2

насколько я могу тел l он не кэширует параметры. Используя тот же экземпляр объекта базы данных, я несколько раз вызывал DiscoverParameters при запуске трассировки. Каждый раз, когда я вызываю DiscoverParameters, я могу видеть [sys]. [Sp_procedure_params_100_managed], поэтому похоже, что он делает поездку туда и обратно каждый раз.

Вот пример того, как сделать это самостоятельно, это кажется, что это может быть в порядке:

http://davidhayden.com/blog/dave/archive/2006/11/03/CachingStoredProcedureParameters.aspx

+0

Ссылка на статью 2006 года больше не работает. – Firestrand

+0

Он заархивирован на archive.org: https://web.archive.org/web/20070210091538/http://davidhayden.com/blog/dave/archive/2006/11/03/CachingStoredProcedureParameters.aspx – hectorct

Смежные вопросы