Табличные функции в платформе Entity Framework?

Можно ли вызвать табличную функцию (TVF) с помощью Entity Framework?

У меня есть три TVF, определенные в моей базе данных, и они не отображаются в модели Entity Framework или в мастере "Модель обновления из базы данных".

Это легко сделать в Linq-to-SQL, вы просто перетаскиваете TVF на поверхность дизайна, но в L2E это не похоже на возможность.

До сих пор я не нашел ничего, что даже упоминает TVF и Entity Framework вместе.

Ответы

Ответ 1

Если вам просто нужно получить результаты в виде типизированного списка из TVF в Code-First 4.3, вы можете настроить помощника на свой DbContext, например.

    public class ModelDbContext : DbContext
    {

        public IEnumerable<TOutput> FunctionTableValue<TOutput>(string functionName, SqlParameter[] parameters)
        {
                parameters = parameters ?? new SqlParameter[] { };

                string commandText = String.Format("SELECT * FROM dbo.{0}", String.Format("{0}({1})", functionName, String.Join(",", parameters.Select(x => x.ParameterName))));

                return  ObjectContext.ExecuteStoreQuery<TOutput>(commandText, parameters).ToArray();
        }

        private ObjectContext ObjectContext
        {
            get { return (this as IObjectContextAdapter).ObjectContext; }
        }
    }

Вызов

using (var db = new ModelDbContext())
{
    var parameters = new SqlParameter[]
    {
        new SqlParameter("@Id", SqlDbType.Int),
    };
    parameters[0].Value = 1234;

    var items = db.FunctionTableValue<Foo>("fn_GetFoos", parameters);
}