コード例 #1
0
ファイル: StorageDalc.cs プロジェクト: ruo2012/nicnet
        public int Update(Query query, IDictionary <string, IQueryValue> data)
        {
            var schema    = GetSchema();
            var dataClass = schema.FindClassByID(query.Table.Name);

            if (dataClass != null)
            {
                var affectedObjIds = ObjectContainerStorage.GetObjectIds(query);
                foreach (var objId in affectedObjIds)
                {
                    var obj = new ObjectContainer(dataClass, objId);
                    foreach (var entry in data)
                    {
                        var valConst = entry.Value as QConst;
                        if (valConst == null)
                        {
                            throw new NotSupportedException(
                                      String.Format("Value {0} for {1} is not supported", entry.Value, entry.Key));
                        }
                        obj[entry.Key] = valConst.Value;
                    }
                    ObjectContainerStorage.Update(obj);
                }
                return(affectedObjIds.Length);
            }
            var relation = schema.FindRelationshipByID(query.Table.Name);

            if (relation != null)
            {
                throw new NotSupportedException(String.Format("Update is not allowed for relationship {0}", relation.ID));
            }
            return(UnderlyingDalc.Update(query, data));
        }
コード例 #2
0
ファイル: StorageDalc.cs プロジェクト: ruo2012/nicnet
        public void Update(DataTable t)
        {
            var schema    = GetSchema();
            var dataClass = schema.FindClassByID(t.TableName);

            if (dataClass != null)
            {
                foreach (DataRow r in t.Rows)
                {
                    switch (r.RowState)
                    {
                    case DataRowState.Added:
                        InsertDataRow(dataClass, r);
                        break;

                    case DataRowState.Modified:
                        UpdateDataRow(dataClass, r);
                        break;

                    case DataRowState.Deleted:
                        DeleteDataRow(dataClass, r);
                        break;
                    }
                }
                t.AcceptChanges();
                return;
            }
            // check for relation table
            var relation = schema.FindRelationshipByID(t.TableName);

            if (relation != null)
            {
                foreach (DataColumn c in t.Columns)
                {
                    if (c.ColumnName != "subject_id" && c.ColumnName != "object_id")
                    {
                        throw new ArgumentException(String.Format("{0} does not exist in {1}", c.ColumnName, t.TableName));
                    }
                }
                if (!t.Columns.Contains("subject_id"))
                {
                    throw new ArgumentException("subject_id column is required");
                }
                if (!t.Columns.Contains("object_id"))
                {
                    throw new ArgumentException("object_id column is required");
                }
                foreach (DataRow r in t.Rows)
                {
                    switch (r.RowState)
                    {
                    case DataRowState.Added:
                        ObjectContainerStorage.AddRelation(
                            new ObjectRelation(
                                Convert.ToInt64(r["subject_id"]),
                                relation,
                                Convert.ToInt64(r["object_id"])));
                        break;

                    case DataRowState.Deleted:
                        ObjectContainerStorage.RemoveRelation(
                            new ObjectRelation(
                                Convert.ToInt64(r["subject_id", DataRowVersion.Original]),
                                relation,
                                Convert.ToInt64(r["object_id", DataRowVersion.Original]))
                            );
                        break;

                    default:
                        throw new NotSupportedException(String.Format("Relation doesn't support row state {0}", r.RowState));
                    }
                }
                t.AcceptChanges();
                return;
            }

            UnderlyingDalc.Update(t);
        }