我正在使用TransactionalEditingDomain来管理模型的更改。但是,我在创建空模型时遇到了一些问题。我认为问题是当我将模型添加到模型资源(modelResource.getContents().add(model);
)时,因为它应该放在事务中。因此,我尝试使用AddCommand
执行此类操作,但我无法为资源EStructuralFeature
找到contents
。
换句话说,我想写一些类似的东西:
Command cmd = AddCommand.create(editingDomain, modelResource, FEAT_CONTENTS, model);
commandStack.execute(cmd);
问题是我找不到FEAT_CONTENTS
...有没有人有建议?
答案 0 :(得分:2)
我在Eclipse Forum of EMF上使用AddCommand找到了“官方”解决方案:
Command cmd = new AddCommand(editingDomain, modelResource.getContents(), model);
commandStack.execute(cmd);
由于删除根对象也非常重要,因此可以使用与RemoveCommand相同的方法:
Command cmd = new RemoveCommand(editingDomain, modelResource.getContents(), model);
最后,为了完整起见,您还应该知道DeleteCommand(也删除对已删除对象的所有引用)根本不适用于根对象。
答案 1 :(得分:0)
我找到了解决方案,但我真的不喜欢它:
commandStack.execute(new RecordingCommand(editingDomain) {
protected void doExecute() {
modelResource.getContents().add(model);
}
});