如何在桌面应用程序中将DbContext与DI一起使用?

阿尔曼·埃布拉辛普

我一直在与多个非Web应用程序一起工作Entity Framework,但一直很难为我找到一种Generic Repository使用DbContext实施的正确方法

我搜索了很多东西,许多文章都是关于具有短暂生存期的Web应用程序的。在桌面方法中,我找不到合适的方法。

一种方法是,DbContext per ViewModel但我不同意将View与Repository层耦合在一起。

另一个以using这种方式使用子句:

using(var context = new AppDbContext())
{
    // ...
}

但是这样我们就不会Unit of Work也不会使用IoC Containers

那么在桌面应用程序中使用DbContext的最佳实践是什么?

ADbContext是短暂的:它本身代表一个工作单元。如果需要长期的对象状态管理,则可以ObjectStateManager直接在Entity Framework中使用

为了确保对a的访问DbContext,请添加一个接口IDbContextFactory<TDbContext>(或者仅IMyDbContextFactory在您只有一个DbContext类型的情况下),然后将其注入到ViewModels中,并使用其中的一个短命方法DbContext

interface IDbContextFactory<TDbContext>
    where TDbContext : DbContext
{
    TDbContext Create();
}

// Configure:

void ConfigureServices( YourContainer container )
{
    container.RegisterSingleton( IDbContextFactory<YourDbContextType1>, // etc );
    container.RegisterSingleton( IDbContextFactory<YourDbContextType2>, // etc );
    container.RegisterSingleton( IDbContextFactory<YourDbContextType3>, // etc );
}

// Usage:

public class LongLivedViewModel
{
    private readonly IDbContextFactory<YourDbContextType3> dbFactory;

    public LongLivedViewModel( IDbContextFactory<YourDbContextType3> dbFactory)
    {
        this.dbFactory = dbFactory ?? throw new ArgumentNullException(nameof(dbFactory));

        this.DoSomethingCommand = new RelayCommand( this.DoSomethingAsync )
    }

    public RelayCommand DoSomethingCommand { get; }

    public async RelayCommand DoSomethingAsync()
    {
        using( YourDbContextType3 db = this.dbFactory.Create() )
        {
            // do stuff

            await db.SaveChangesAsync();
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Rails应用程序中将AngularJS路由与Haml模板一起使用

来自分类Dev

如何在.NET Web API应用程序中将FluentValidation与Swagger一起使用?

来自分类Dev

如何在电子应用程序中将sqlite3与变量一起使用

来自分类Dev

如何在Marionette JS中将路由器与应用程序一起使用

来自分类Dev

如何在Rails 4.1应用程序中将基于事件的文件系统侦听器与Spring一起使用

来自分类Dev

如何在Trigger.io应用程序中将Angular视图模板与本地模板文件一起使用?

来自分类Dev

如何在Nginx中将WordPress与Django应用程序一起安装

来自分类Dev

蓝牙信标如何与应用程序一起使用?

来自分类Dev

如何在同一个Angular JS应用程序中将不同的API与不同的身份验证标头一起使用

来自分类Dev

是否可以将Java WebSocket与桌面应用程序一起使用?

来自分类Dev

是否可以将Java WebSocket与桌面应用程序一起使用?

来自分类Dev

如何在ASP.NET中将应用程序数据与用户信息结合在一起

来自分类Dev

如何在wpf / winforms应用程序(带有图片)中将DLL与.exe组合在一起

来自分类Dev

将Unity DI与控制台应用程序一起使用

来自分类Dev

在Rails应用程序中将实例方法与Chartkick一起使用

来自分类Dev

在Rails应用程序中将CarrierWave与Amazon Elastic Transcoder一起使用

来自分类Dev

无法在Rust / Actix应用程序中将计时功能与柴油一起使用

来自分类Dev

在Rails应用程序中将实例方法与Chartkick一起使用

来自分类Dev

在Windows应用程序中将Windows身份验证与Sql Server一起使用

来自分类Dev

在WinExist中将应用程序名称与空格一起使用

来自分类Dev

在角度应用程序中将Ui-select与多个类别一起使用

来自分类Dev

如何在Android Studio中复制应用程序以与其他资源一起使用?

来自分类Dev

如何在单元测试 React 应用程序中一起使用 Karma 和 Jest?

来自分类Dev

将Twitterizer与C#桌面应用程序一起使用“名称请求不存在...”

来自分类Dev

Phonegap和AngularJS如何在应用程序中一起工作?

来自分类Dev

Phonegap和AngularJS如何在应用程序中一起工作?

来自分类Dev

如何在混合移动应用程序中将材料设计精简版中的FAB按钮与jQuery移动代码集成在一起?

来自分类Dev

将tsUnit与NodeJs应用程序一起使用

来自分类Dev

将RabbitMQ与Ionic应用程序一起使用

Related 相关文章

  1. 1

    如何在Rails应用程序中将AngularJS路由与Haml模板一起使用

  2. 2

    如何在.NET Web API应用程序中将FluentValidation与Swagger一起使用?

  3. 3

    如何在电子应用程序中将sqlite3与变量一起使用

  4. 4

    如何在Marionette JS中将路由器与应用程序一起使用

  5. 5

    如何在Rails 4.1应用程序中将基于事件的文件系统侦听器与Spring一起使用

  6. 6

    如何在Trigger.io应用程序中将Angular视图模板与本地模板文件一起使用?

  7. 7

    如何在Nginx中将WordPress与Django应用程序一起安装

  8. 8

    蓝牙信标如何与应用程序一起使用?

  9. 9

    如何在同一个Angular JS应用程序中将不同的API与不同的身份验证标头一起使用

  10. 10

    是否可以将Java WebSocket与桌面应用程序一起使用?

  11. 11

    是否可以将Java WebSocket与桌面应用程序一起使用?

  12. 12

    如何在ASP.NET中将应用程序数据与用户信息结合在一起

  13. 13

    如何在wpf / winforms应用程序(带有图片)中将DLL与.exe组合在一起

  14. 14

    将Unity DI与控制台应用程序一起使用

  15. 15

    在Rails应用程序中将实例方法与Chartkick一起使用

  16. 16

    在Rails应用程序中将CarrierWave与Amazon Elastic Transcoder一起使用

  17. 17

    无法在Rust / Actix应用程序中将计时功能与柴油一起使用

  18. 18

    在Rails应用程序中将实例方法与Chartkick一起使用

  19. 19

    在Windows应用程序中将Windows身份验证与Sql Server一起使用

  20. 20

    在WinExist中将应用程序名称与空格一起使用

  21. 21

    在角度应用程序中将Ui-select与多个类别一起使用

  22. 22

    如何在Android Studio中复制应用程序以与其他资源一起使用?

  23. 23

    如何在单元测试 React 应用程序中一起使用 Karma 和 Jest?

  24. 24

    将Twitterizer与C#桌面应用程序一起使用“名称请求不存在...”

  25. 25

    Phonegap和AngularJS如何在应用程序中一起工作?

  26. 26

    Phonegap和AngularJS如何在应用程序中一起工作?

  27. 27

    如何在混合移动应用程序中将材料设计精简版中的FAB按钮与jQuery移动代码集成在一起?

  28. 28

    将tsUnit与NodeJs应用程序一起使用

  29. 29

    将RabbitMQ与Ionic应用程序一起使用

热门标签

归档