internal void RegisterNewItem(ClientXObject <TKind> _child, Guid _collectionOwnerUid, int _fieldId) { var ownerDescriptor = GetDescriptor(_collectionOwnerUid); ClientXObjectDescriptor <TKind> childDescriptor; if (m_descriptors.TryGetValue(_child.Uid, out childDescriptor)) { if (!childDescriptor.CollectionOwnerUid.Equals(_collectionOwnerUid)) { throw new ApplicationException("Object owned by another parent"); } ProcessAddedToCollection(_child, ownerDescriptor, _fieldId); return; //throw new ApplicationException("Object is not unique"); } var kindId = KindToInt(_child.Kind); var report = new XReport(_child.Uid, _child.GetChanges(), kindId, EState.SINGLE); m_transport.AddNew(report, m_sessionId, _collectionOwnerUid); var descriptor = new ClientXObjectDescriptor <TKind>(_child, this, kindId, _collectionOwnerUid); m_descriptors.Add(_child.Uid, descriptor); ProcessAddedToCollection(_child, ownerDescriptor, _fieldId); _child.SetClientInternal(this); _child.OnInstantiationFinished(); }
void IXCollection <TKind> .AddSilently(ClientXObject <TKind> _item) { if (!m_dict.ContainsKey(_item.Uid)) { m_dict.Add(_item.Uid, (T)_item); _item.SetClientInternal(m_client); UpdateVM(() => m_observableCollection.Add((T)_item)); } }