ОК, у меня нет точного решения для вас, но у меня похожая ситуация. EF Сгенерированные поля заканчиваются ID, если при ссылке на другую таблицу. Пример. У таблицы Person есть столбец JobID вместо Job. Нам это не нравится. Это была проблема: http://social.msdn.microsoft.com/Forums/en-US/adonetefx/thread/f8ddb2be-78c9-4296-b293-37b7bc8e8fd7
Итак, что сделал мой напарник, так это "переопределил" соглашение по умолчанию. Пожалуйста, прости, если это не совсем твой случай. Я думаю, что это должно дать вам несколько советов. Это с EF V 4.1
public class ASRCDb : DbContext, IUnitOfWork
{
public void Complete()
{
SaveChanges();
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
AddAllEntities(modelBuilder);
}
static void AddAllEntities(DbModelBuilder modelBuilder)
{
var entity = typeof(DbModelBuilder).GetMethod("Entity");
foreach (var entityType in GetEntityTypes())
{
var entityTypeConfiguration = entity.MakeGenericMethod(entityType).Invoke(modelBuilder, null);
foreach (var propertyInfo in GetReferenceProperties(entityType))
ConfigureRelationship(propertyInfo, entityTypeConfiguration);
}
}
static IEnumerable<PropertyInfo> GetReferenceProperties(Type entityType)
{
return entityType.GetProperties().Where(p => typeof(IEntity).IsAssignableFrom(p.PropertyType));
}
static IEnumerable<Type> GetEntityTypes()
{
return typeof(Entity).Assembly.GetTypes().Where(type => type.IsClass && !type.IsAbstract);
}
static void ConfigureRelationship(PropertyInfo propertyInfo, dynamic entityTypeConfiguration)
{
var required = propertyInfo.GetCustomAttributes(typeof(RequiredAttribute), true).Any();
var navigation = required
? entityTypeConfiguration.HasRequired(GetPropertyExpression(propertyInfo))
: entityTypeConfiguration.HasOptional(GetPropertyExpression(propertyInfo));
UsePropertyNameAsColumnName(propertyInfo, navigation);
}
static void UsePropertyNameAsColumnName(PropertyInfo propertyInfo, dynamic navigation)
{
Action<ForeignKeyAssociationMappingConfiguration> mapKey = x => x.MapKey(propertyInfo.Name);
navigation.WithMany().Map(mapKey);
}
static dynamic GetPropertyExpression(PropertyInfo propertyInfo)
{
var parameter = Expression.Parameter(propertyInfo.ReflectedType);
return Expression.Lambda(
typeof(Func<,>).MakeGenericType(propertyInfo.ReflectedType, propertyInfo.PropertyType),
Expression.Property(parameter, propertyInfo),
parameter);
}
}
Вся заслуга моему приятелю Диего Миджельшону.