Преобразование имен базы данных в сущность
В настоящее время я использую EF 5.0.0 с EF Power Tools 3. Я пытаюсь выполнить обратный инжиниринг из существующей базы данных с помощью сначала кода обратного инжиниринга (Power Tools 3). Пример этого можно найти по ссылке MSDN.
Единственная проблема в этом - это имя объектов моей базы данных. Моя база данных использует маленькие слова и подчеркивание как пробел, например: item_cart. Однако я не хочу, чтобы такой стандарт именования передавался моему приложению C#.
Затем я попытался настроить шаблон для преобразования каждого имени таблицы / поля в соответствии со стандартами именования приложений. Это текущий инструмент конвертации, который я делал до сих пор.
public static string SqlNameToEntityName(string name)
{
StringBuilder entityName = new StringBuilder();
if(string.IsNullOrEmpty(name)) return name;
else if (!name.Contains('_'))
{
return name[0].ToString().ToUpper() + name.Substring(1);
}
string rippedName = name;
while(rippedName[0] == '_')
{
rippedName = rippedName.Substring(1);
}
do{
entityName.Append( CustomConvention.UpperFirstChar( rippedName.Substring(0, rippedName.IndexOf('_')) ) );
rippedName = rippedName.Substring(rippedName.IndexOf('_')+1);
}while(rippedName.Contains('_'));
entityName.Append( CustomConvention.UpperFirstChar(rippedName) );
return entityName.ToString();
}
public static string UpperFirstChar(string name)
{
if(string.IsNullOrEmpty(name)) return "";
return name[0].ToString().ToUpper() + name.Substring(1, name.Length-1).ToLower();
}
Затем в Entity.tt я изменил шаблон, используя этот статический метод. columnName = CustomConvention.SqlNameToEntityName(columnName);
, Используя этот подход, я могу преобразовать имена таблиц из item_cart
в ItemCart
достаточно хорошо (пока не проверено).
Наконец, вот мои вопросы:
- В настоящее время я не могу изменить имя файла.cs в соответствии с соглашением об именах. Так что все еще остается как item_cart.cs
- Мой подход создаст проблемы в будущем?
- Есть ли более лучший (стандартный / более чистый) способ сделать это?
- Помимо этого реверс-инжиниринга, какой самый лучший (самый быстрый и самый чистый) способ сопоставить таблицы (возможно, представления и процедуры) с сущностями?
Возможный связанный вопрос: Разрешение конфликта соглашения об именах между сущностями в EF4 и стандартами нашей базы данных?