Multi-async in Entity Framework 6?

前端 未结 3 1931
说谎
说谎 2020-11-28 07:54

This is my code:

var banner = context.Banners.ToListAsync()
var newsGroup = context.NewsGroups.ToListAsync()
await Task.WhenAll(banner, newsGroup);


        
相关标签:
3条回答
  • 2020-11-28 08:10

    If you are using IoC container for your Data Provider injection, consider to use "transient" or "PerWebRequest" type for your lifecycle.

    For example: https://github.com/castleproject/Windsor/blob/master/docs/lifestyles.md

    0 讨论(0)
  • 2020-11-28 08:28

    The exception explains clearly that there is only one asynchronous operation per context allowed at a time.

    So, you either have to await them one at a time as the error message suggests:

    var banner = await context.Banners.ToListAsync();
    var newsGroup = await context.NewsGroups.ToListAsync();
    

    Or you can use multiple contexts:

    var banner = context1.Banners.ToListAsync();
    var newsGroup = context2.NewsGroups.ToListAsync();
    await Task.WhenAll(banner, newsGroup);
    
    0 讨论(0)
  • 2020-11-28 08:32

    If you use Unity for dependency injection with for example repository pattern you will get the following error using two or more contexts with create/update/delete:

    The relationship between the two objects cannot be defined because they are attached to different ObjectContext objects.

    This can be solved using PerRequestLifetimeManager. More info here:

    C# EF6 make multiple async calls to one context using Unity - Asp.Net Web Api

    container.RegisterType<DbContext>(new PerRequestLifetimeManager());
    container.RegisterType<ISupplierRepository, SupplierRepository>();
    container.RegisterType<IContactRepository, ContactRepository>();
    
    0 讨论(0)
提交回复
热议问题