Per another answer here I created a custom tool and put the source on GitHub: EdmxUpdater (disclaimer, the UI is horrible).
Basically I took all of the XSD's and generated XML serialization types, then wrote some code to actually perform the name updates. The project is very rough but basically handles Pascal casing and removal of underscores from properties.
It uses the mapping so the name changes are idempotent.
protected override void UpdateEdmx(TEdmx edmx)
{
var scalarProperties = from esm in edmx.Runtime.Mappings.Mapping.EntityContainerMapping.EntitySetMapping
from etm in esm.EntityTypeMapping
from f in etm.MappingFragment
from sp in f.ScalarProperty
select new { ScalarProperty = sp, etm.TypeName };
var mapQuery = from sp in scalarProperties
let item = new { sp.TypeName, sp.ScalarProperty.Name, sp.ScalarProperty.ColumnName }
group item by sp.TypeName into g
select g;
//build map of new entity property names
var map = mapQuery.ToDictionary(g => g.Key, g => g.Distinct().ToDictionary(sp => sp.Name, sp => UpdateName(sp.ColumnName)));
//update map property names:
foreach (var sp in scalarProperties)
{
sp.ScalarProperty.Name = map[sp.TypeName][sp.ScalarProperty.Name];
}
//conceptual entities
foreach(var entity in edmx.Runtime.ConceptualModels.Schema.EntityType)
{
var typeName = String.Format("{0}.{1}", edmx.Runtime.ConceptualModels.Schema.Namespace, entity.Name);
var typeMap = map[typeName];
//keys
foreach (var keyRef in entity.Key.PropertyRef)
{
keyRef.Name = typeMap[keyRef.Name];
}
//conceptual properties
foreach (var property in entity.Property)
{
property.Name = typeMap[property.Name];
}
}
var principalPropertyQuery = from association in edmx.Runtime.ConceptualModels.Schema.Association
let end = association.End.Where(e => e.Role == association.ReferentialConstraint.Principal.Role).Single()
from property in association.ReferentialConstraint.Principal.PropertyRef
select new { TypeName = end.Type, Property = property };
var dependentPropertyQuery = from association in edmx.Runtime.ConceptualModels.Schema.Association
let end = association.End.Where(e => e.Role == association.ReferentialConstraint.Dependent.Role).Single()
from property in association.ReferentialConstraint.Dependent.PropertyRef
select new { TypeName = end.Type, Property = property };
foreach (var property in principalPropertyQuery.Union(dependentPropertyQuery))
{
property.Property.Name = map[property.TypeName][property.Property.Name];
}
}