我想知道是否有办法从视图中删除条目。
Ex:你有User Aggregate Root,其中包含Active属性
发出UserCreated事件时,User Active属性设置为true 并且ActiveUserView被置于其中,因此用户将出现在视图中。
现在为相同的聚合根ID发出UserInactive,InactiveUsersView订阅了它,但是这个AG仍然在ActiveUsersView中,我该如何删除它?或者我做错了什么?
编辑:我知道我可以使用聚合根ID手动删除它,但这不是一个漂亮的解决方案。
答案 0 :(得分:1)
我不确定我是否正确理解了你的问题 - 但无论如何我都会采取措施:)
所以 - 我的理解是你有一个汇总UserCreated
和UserInactive
的聚合根,你想要维护两个视图:ActiveUsersView
和InactiveUsersView
,每个视图都包含分别为每个活动和非活动用户的视图实例。
由于目前无法删除带有Cirqus(*)的视图实例,我建议您将视图更改为UserActivityStatusView
insted,只需在每个事件上轻弹一个bool - 就像这样:
public class UserActivityStatusView :
IViewInstance<InstancePerAggregateRootLocator>,
ISubscribeTo<UserCreated>,
ISubscribeTo<UserInactive>
{
//...
public bool Active { get; set; }
public void Handle(IViewContext c, UserCreated e) {
Active = true;
}
public void Handle(IViewContext c, UserInactive e) {
Active = false;
}
}
然后,在您的应用程序中,您只需确保使用正确的标准查询视图。
这有意义吗?
(PS:我为你问题的迟到答案道歉:))
(*我实际上打算允许拨打viewContext.MarkForDeletion()
,但事实证明这比我预想的要困难得多......而且我并不需要那么多,我一直都能来用同样好的替代方法来建模我的观点)