private void AlterTables(StringBuilder script, IEnumerable <PropertyDefinition> props, ISourceProvider provider, bool unicodeStrings) { bool hdr = false; foreach (SourceFragmentDefinition s in props.Select(item => item.SourceFragment).Distinct()) { SourceFragmentDefinition sf = s; var targetSF = SourceView.GetSourceFragments().SingleOrDefault(item => item.Name == sf.Name && item.Selector == sf.Selector); if (targetSF != null) { List <PropDefinition> tableProps = new List <PropDefinition>(); foreach (PropertyDefinition prop in props.Where(item => item.SourceFragment == sf)) { if (prop is ScalarPropertyDefinition) { tableProps.Add(new PropDefinition { Attr = prop.Attributes, Field = ((ScalarPropertyDefinition)prop).SourceField, PropType = prop.PropertyType }); } else { tableProps.AddRange(((EntityPropertyDefinition)prop).SourceFields .Select(item => new PropDefinition { Attr = Field2DbRelations.None, Field = item, PropType = prop.PropertyType.Entity.GetProperties().Single(p => p.PropertyAlias == item.PropertyAlias).PropertyType })); } } var props2Add = tableProps.Where(item => !SourceView.GetSourceFields(targetSF).Any(fld => fld.SourceFieldExpression == item.Field.SourceFieldExpression)); if (props2Add.Count() > 0) { if (!hdr) { script.AppendLine("--Altering tables"); hdr = true; } provider.GenerateAddColumnsScript(props2Add, script, unicodeStrings); } } } }