среда, 12 мая 2010 г.

EF и хранимые процедуры

При работе с MS EF возникают проблемы при выполнении хранимых процедур, которые возвращают табличное значение. Для работы с такими процедурами есть расширение к EF. Это расширение предоставляет набор методов для материализации объектов из хп.
Ну и пример работы с материализацией.


public List CheckAccess(List baseObjectIds)
{
if (!ConfigSettings.UseSecurity)
{
return baseObjectIds;
}

List result;
using (
DbCommand command = Context.CreateStoreCommand("SP_CheckAccessToObjects",
  CommandType.StoredProcedure,
  new object[]
{
new SqlParameter("objIds",baseObjectIds.ConcatenateIdentifiers())

}))
{
try
{
if (command.Connection.State == ConnectionState.Closed)
{
command.Connection.Open();
}

result = new List(command.Materialize(r => r.Field("ObjId")));
}
catch (Exception ex)
{
Logger.Error(ex);
result = new List();
}
}
return result;
}