ServiceStack的OrmLite中的对象创建事件

时间:2013-09-08 18:46:15

标签: servicestack ormlite-servicestack

我需要在OrmLite实例化的对象上设置一个事件处理程序,并且无法找到一个很好的方法来执行它,而不是访问repo中的每个Get方法(这显然不是一个好方法)。

给出一些背景 - 比如我有一个用户类,它是从数据库中提取的;它还实现了INotifyPropertyChanged。我想为该事件分配一个处理程序。从Funq自动填充它将是理想的,但当然OrmLite不会要求Funq保湿新物体。

所以我被卡住了。

任何正确方向的提示都将受到赞赏。

1 个答案:

答案 0 :(得分:2)

在我看来,就像你将表示逻辑与数据访问逻辑混合在一起一样。如果我在你的位置,我不会尝试在模型(例如你的用户类)上实现INotifyPropertyChanged。相反,我会创建一个ViewModel并将数据绑定逻辑放在那里(MVVM Style)。

在数据模型中使用INotifyPropertyChanged在您开始使用它时并不合乎逻辑。如果我要更新数据库记录,则不会触发此事件(但属性已更改)。它在ViewModel上更有意义。

除了解决原始问题之外,它还可以让您聚合,撰写和过滤数据以便显示,从而使构建复杂屏幕变得更加容易。如果您需要从数据库,RSS源,股票行情网络API和推特中提取信息,您可以在ViewModel中执行此操作。

public class User
{
    [AutoIncrement]
    public int Id { get; set; }

    public string Name { get; set; }
}

public class UserViewModel : INotifyPropertyChanged
{
    private string _name;

    public UserViewModel(User user)
    {
        _name = user.Name;
    }

    public string Name
    {
        get { return _name; }
        set {
            if (value == _name) return;
            _name = value;
            OnPropertyChanged("Name");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}

小注意:此答案是在带有ViewModel的屏幕上显示数据的上下文中编写的,但是,相同的概念适用于出于任何目的观察模型更改。