目前我正在使用 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 中的实体与我们的数据库标准之间的命名约定冲突?