Похоже, вы инициализируете некоторые свойства класса домена из конструктора. Это лучше всего сделать, создав AddRule. AddRules вызываются, когда в модель добавляется экземпляр класса домена, к которому они присоединены. Например:
[RuleOn(typeof(Entity), FireTime = TimeToFire.TopLevelCommit)]
internal sealed partial class EntityAddRule : AddRule
{
public override void ElementAdded(ElementAddedEventArgs e)
{
if (e.ModelElement.Store.InUndoRedoOrRollback)
return;
if (e.ModelElement.Store.TransactionManager.CurrentTransaction.IsSerializing)
return;
var entity = e.ModelElement as Entity;
if (entity == null)
return;
// InitializeProperties contains the code that used to be in the constructor
entity.InitializeProperties();
}
}
Затем необходимо зарегистрировать AddRule, переопределив функцию в классе модели вашего домена:
public partial class XXXDomainModel
{
protected override Type[] GetCustomDomainModelTypes()
{
return new Type[] {
typeof(EntityAddRule),
}
}
}
Дополнительные сведения о правилах см. В разделе «Как создать пользовательские правила» в документации VS SDK.
Примечание: решение основано на DSL Tools VS 2008. YMMV.