Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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();
            }
        }
Ejemplo n.º 3
0
        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);
        }