C# 更改列表元素的属性时创建修订
假设我有以下实体:C# 更改列表元素的属性时创建修订,c#,nhibernate,nhibernate-envers,C#,Nhibernate,Nhibernate Envers,假设我有以下实体: public class Group { public IList<Item> Items { get; set; } } public class Item { public Group Group { get; set; } public string Name { get; set; } } 公共类组 { 公共IList项{get;set;} } 公共类项目 { 公共组组{get;set;} 公共字符串名称{get;set
public class Group
{
public IList<Item> Items { get; set; }
}
public class Item
{
public Group Group { get; set; }
public string Name { get; set; }
}
公共类组
{
公共IList项{get;set;}
}
公共类项目
{
公共组组{get;set;}
公共字符串名称{get;set;}
}
现在,我希望Envers在项目
的名称
属性发生更改时,为组
创建一个修订。如果我更改集合(顾名思义;-)本身,则更改集合上的revision\u\u\u change
属性就可以工作
是否可以将Envers设置为将父实体与其子元素属性的属性“连接”起来?简短回答:
没有
详细回答:
根据您的用例,有可能适合您需求的替代方案。请确保您的组实体在其中一个项目被修改时会被修改,或者在查询组时包含修改后的项目(后者可能需要双向关系)。触发器是您的朋友。触发器是什么,在哪里定义它们?我在Envers文档中找不到任何东西。我确信他指的是数据库触发器-您配置数据库以执行的代码,它由各种事件触发。例如,您可以添加一个触发器,每当项目更改插入到审核表中时触发该触发器,然后审核表也会插入相应的组更改。谢谢您的回答。这种关系已经是双向的了。你能给我一个提示,如何在查询时包含修改项的修订吗?罗杰,我仍在寻找这个问题的解决方案。你能帮帮我吗?正如我所说,埃弗斯不支持这一点。但是,您当然可以确保每次子对象被修改时,父对象总是被修改的(或者是侦听器/事件侦听器,或者是在您的域模型中修复它)。或者,您也可以查询子版本以获取其已更改的修订,然后使用这些修订号查询父版本。