Сделать вызов базы данных асинхронным в EF

Я использую EF 5.0 и у меня есть вопрос о том, чтобы сделать вызовы базы данных асинхронными.

Для начала ниже это автоматически сгенерированный вызов метода в contextModel>.context.cs

public virtual ObjectResult<InstructorsComplex> GetInstructors(string nm, string cd, string grp_cd)
    {
        var nmParameter = nm != null ?
            new ObjectParameter("nm", nm) :
            new ObjectParameter("nm", typeof(string));

        var cdParameter = cd != null ?
            new ObjectParameter("cd", cd) :
            new ObjectParameter("cd", typeof(string));

        var grp_cdParameter = grp_cd != null ?
            new ObjectParameter("grp_cd", grp_cd) :
            new ObjectParameter("grp_cd", typeof(string));

        return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<InstructorsComplex>("GetInstructors", nmParameter, cdParameter, grp_cdParameter);
    }

Я вызываю метод, как показано ниже, для достижения асинхронности, так как вышеуказанный вызов занимает около 1 секунды для выполнения:

public async Task<IList<Instructor>> GetInstructors(DatabaseRequest input)
    {           
        //fetch from database ASYNChronously
        var daoOutput = await Task.Run( () => _DAO.GetInstructors(input));

        var retVal = daoOutput.ToList<Instructor>();

        return retVal;
    }

Но даст ли это какой-либо прирост производительности, просто запустив процесс с помощью Task.Run()?

В.Net Framework у нас есть методы xxxAsync(). Но я не нахожу таких методов в EF 5.0.

Если приведенный выше код неэффективен, как я могу написать асинхронный метод для дорогостоящих вызовов базы данных с использованием EF 5.0?

Любая помощь приветствуется.

0 ответов

Другие вопросы по тегам