使用Catel与存储库模式,EF6和视图模型

时间:2015-05-26 08:48:59

标签: catel

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

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

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

我目前在我的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));

基本上,我有两种处理数据的方案:

  1. 获取要在数据网格上显示的所有数据
  2. 选择数据网格上的记录以打开另一个视图以编辑单个记录
  3. 任何指导都将不胜感激。

1 个答案:

答案 0 :(得分:1)

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

  1. 在服务中创建抽象(因此VM只能使用服务,服务是您的数据库中的API)。这些服务适用于UoW
  2. 有些人认为1过于复杂。在这种情况下,您只需使用VM中的UoW
  3. 即可

    两者都有其优点和缺点,只需选择你最相信的东西。