wpf - NHibernate的可共混性/MVVM

标签 wpf nhibernate mvvm expression-blend design-time

我目前正在使用NHibernate作为持久层的WPF应用程序上工作。我正在尝试部分使用MVVM,以便可以使用Blend来帮助设计控件。

我尝试遵循Effectus中Ayende Rahien的示例,即每个演示者只有一个ISession(在我的情况下,这是一个 View 模型而不是演示者)。我的 View 模型如下所示:

public abstract ViewModelBase : INotifyPropertyChanged
{
    private readonly ISessionFactory _sessionFactory;

    protected ViewModelBase(ISessionFactory sessionFactory)
    {
        _sessionFactory = sessionFactory;
    }

    private ISession Session
    {
        get
        {
            if (_session == null)
            {
                _session = _sessionFactory.OpenSession();
            }
            return _session;
        }
    }
    private ISession _session;

    // INotifyPropertyChanged implementation here...
}

public class MainWindowViewModel : ViewModelBase
{
    public MainWindowViewModel(ISessionFactory sessionFactory)
        : base(sessionFactory)
    {
        var rep = new ProductRepository(this.Session);
        this.Products = new ObservableCollection<Product>(rep.GetAll());
    }

    public ObservableCollection<Product> Products
    {
        get
        {
            return _products;
        }
        set
        {
            if (_products != value)
            {
                _products = value;
                RaisePropertyChanged("Products");
            }
        }
    }
    private ObservableCollection<Product> _products;
}

public class DesignMainWindowViewModel : MainWindowViewModel
{
    public DesignMainWindowViewModel(ISessionFactory sessionFactory)
        : base(sessionFactory)
    {
    }

    public new ObservableCollection<Product> Products
    {
        get
        {
            List<Product> products = new List<Product>();
            // fill in design-time products...
            return products;
        }
        set
        {
        }
    }
}

我想要实现的是拥有一个与Unity配合使用的ViewModelLocator,以便在Blend中工作时实例化设计时 View 模型(在正常运行软件时实例化常规 View 模型)。但是,我需要一个设计时ISessionFactory来实例化DesignMainWindowViewModel。

三个问题:
  • 是否有一种简单的方法来实现内存ISessionFactory?
  • 我应该尝试使用内存中的SQLite数据库吗?
  • 我对整个事情采用了错误的方法吗?
  • 最佳答案

    该 View 不应对NH有任何了解。不是它的责任。
    NH session 应在服务级别或存储库级别处理。有很多变数和方法,事实是这样:没有 Elixir 。所有取决于View的功能。

    我建议查看unNHAddins(http://code.google.com/p/unhaddins/)中有关NH和WPF的一些示例。

    我昨天在此答案中添加了更多信息:
    NHibernate in C# application, how to manage session

    祝你好运!

    关于wpf - NHibernate的可共混性/MVVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5524707/

    相关文章:

    mvvm - 将信息从父 View 模型传递到 subview 模型的正确 MVVM 方法

    c# - XAML 使用单选按钮启用和禁用具有数据绑定(bind)的文本框

    android - xml中的数据绑定(bind) slider

    c# - Unity CS0308 错误

    带有外部更新的 NHibernate 二级缓存

    c# - 如何在 C# 中退出非 void 方法

    c# - 如何使用流畅的 nhibernate 自动映射在同一个表中引用父实体?

    c# - NHibernate 不保存实体

    wpf - 避免小窗口的 MVVM/数据绑定(bind)?

    c# - TranslateTransform 移动元素超出预期