Exemplo n.º 1
0
        public bool Update(Schema.Domain.Entity entityMetadata, Entity data)
        {
            //exists summary field?
            var summaryFields = _attributeFinder.Query(n => n.Where(f => f.SummaryEntityId == entityMetadata.EntityId));

            if (summaryFields.NotEmpty())
            {
                foreach (var item in summaryFields)
                {
                    var ae = new AttributeAggregateExpression();
                    ae = ae.DeserializeFromJson(item.SummaryExpression);
                    if (!data.ContainsKey(ae.Field))
                    {
                        continue;
                    }
                    if (ae.EntityName.IsCaseInsensitiveEqual(data.Name))
                    {
                        var rs = _relationShipFinder.FindByName(ae.RelationshipName);
                        _fieldValueUpdater.UpdateSummaryValue(entityMetadata, data, item, rs, ae);
                        //字段公式计算
                        var formulaAttributes = _attributeFinder.FindByEntityName(rs.ReferencedEntityName).Where(n => n.ValueType == 2).ToList();
                        if (formulaAttributes.NotEmpty())
                        {
                            _fieldValueUpdater.UpdateFormulaValue(rs.ReferencedEntityName, formulaAttributes, data.GetGuidValue(rs.ReferencedAttributeName));
                        }
                    }
                }
            }
            return(true);
        }
Exemplo n.º 2
0
        public bool UpdateSummaryValue(Schema.Domain.Entity entityMetadata, Entity data, Schema.Domain.Attribute summaryField, Schema.Domain.RelationShip relationShipMetadata, AttributeAggregateExpression aggExp)
        {
            var sql = string.Format("UPDATE {0} SET {1}=(SELECT {6}({2}) FROM {3} WITH(NOLOCK) WHERE {4}='{5}') WHERE {4} = '{5}'"
                                    , summaryField.EntityName, summaryField.Name, aggExp.Field, aggExp.EntityName
                                    , relationShipMetadata.ReferencedAttributeName, data[relationShipMetadata.ReferencingAttributeName].ToString()
                                    , aggExp.Aggregate);

            _repository.Execute(sql, null);
            return(true);
        }