private void OnNotifyForeignPropertyChanged(object sender, PropertyChangedEventArgs e) { bool doRemoveRow = string.IsNullOrEmpty(e.PropertyName); if (foreignKeyMap == null || (!doRemoveRow && !EntityTableHelper <TEntity> .IsKeyProperty(typeof(TEntity), e.PropertyName))) { return; } var foreignRow = sender as EntityRow; object key; if (foreignKeyMap.TryGetValue(foreignRow.InternalId, out key)) { this.EntityRelation.Keys.Remove(key.ToString()); } if (doRemoveRow) { FireResetNotifyCollection(); return; } object newKey = foreignRow[e.PropertyName]; //if ((key == null && newKey == null) || key.Equals(newKey)) // return; this.EntityRelation.Keys.Add(newKey); foreignKeyMap[foreignRow.InternalId] = newKey; notifyCollectionChangedAction = NotifyCollectionChangedAction.Replace; this.UpdateContent(); }
public void DoRemove(TEntity childEntity, bool referenceOnly = true) { string key = EntityTableHelper <TEntity> .RetriveKey(childEntity).ToString(); var proxyInfo = childEntity as IEntityProxyInfo; if (foreignKeyMap == null) { foreignKeyMap = new Dictionary <Guid, object>(); } foreignKeyMap.Remove(proxyInfo.Proxy.Row.InternalId); if (!referenceOnly) { var foreignTableProxy = new EntityTableProxy <TEntity>(proxyInfo.Proxy.Row.Table, this.SourceProvider); foreignTableProxy.Remove(childEntity); } //int idx = this.EntityRelation.Keys.IndexOf(key); if (this.EntityRelation.Keys.Remove(key)) { // UpdateContent(); //NotifyCollectionChangedAction.Remove會當,原因不明 //NotifyCollectionChangedEventArgs e = new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, childEntity, idx); // NotifyCollectionChangedEventArgs e = new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset); // OnCollectionChanged(e); //FireResetNotifyCollection(); UpdateContent(); } }
static public EntityTable CreateEntitySchema(bool genDefaultKey = false) { var schema = EntityTableHelper <IEntitySchema> .CreateDataTable(); schema.Columns["DataType"].DefaultValue = typeof(string).FullName; schema.Columns["FieldType"].DefaultValue = EntityFieldType.Var.ToString(); if (genDefaultKey == true) { var tblProxy = new EntityTableProxy <IEntitySchema>(schema); var colDef = tblProxy.Append(); colDef.Unique = true; colDef.KeyGen = "id_{0}"; colDef.ColumnName = "Id"; schema.TableName = ""; } return(schema); }