将 Catel 与存储库模式、EF6 和视图模型结合使用

Using Catel with Repository Pattern, EF6 and View Models

我找不到任何关于使用 Catel 将视图模型连接到存储库的文档。

我已经使用 EF6 Code First 设置了存储库模式和我的模型(全部从 ModelBase 扩展),但需要知道如何将它与 ViewModel 一起使用。

我需要为 UnitOfWork 创建服务吗?如果是这样,怎么办?我将如何在 ViewModel 中使用它?

我目前正在使用存储库作为我的视图模型中的模型,但我认为这不是正确的方法吗?在下面查看我的 CompaniesViewModel:

IUnitOfWork uow;

    public CompaniesViewModel()
    {
        uow = new UnitOfWork<SoftwareSolutionsContext>();

        CompanyRepository = uow.GetRepository<ICompanyRepository>();
    }

    public override string Title { get { return "Companies"; } }

    protected override async Task Close()
    {
        uow.Dispose();

        await base.Close();
    }

    protected override async Task Initialize()
    {
        Companies = new ObservableCollection<Company>(CompanyRepository.GetAll());

        await base.Initialize();
    }

    public ObservableCollection<Company> Companies
    {
        get { return GetValue<ObservableCollection<Company>>(CompaniesProperty); }
        set { SetValue(CompaniesProperty, value); }
    }

    public static readonly PropertyData CompaniesProperty = RegisterProperty("Companies", typeof(ObservableCollection<Company>), null);

    [Model]
    public ICompanyRepository CompanyRepository
    {
        get { return GetValue<ICompanyRepository>(CompanyRepositoryProperty); }
        private set { SetValue(CompanyRepositoryProperty, value); }
    }

    public static readonly PropertyData CompanyRepositoryProperty = RegisterProperty("CompanyRepository", typeof(ICompanyRepository));

基本上,我有 2 个处理数据的场景:

  1. 获取所有数据以显示在数据网格上
  2. 选择数据网格上的记录以打开另一个视图以编辑单个记录

如有任何指导,我们将不胜感激。

这是一个非常难的题目,因为这里基本上有几个选项:

  1. 在服务中创建抽象(因此 VM 仅与服务一起工作,服务是您 API 到数据库中)。这些服务适用于 UoW
  2. 有些人认为 1 过于复杂。在这种情况下,您可以简单地在 VM
  3. 中使用 UoW

两者各有优缺点,选择你最相信的。