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); }
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); }