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