C# 数据库到实体的命名转换

C# 数据库到实体的命名转换,c#,entity-framework,naming-conventions,reverse-engineering,ef-power-tools,C#,Entity Framework,Naming Conventions,Reverse Engineering,Ef Power Tools,目前我正在使用EF 5.0.0和EF电动工具3。我正在尝试从一个现有的数据库中首先使用反向工程代码(Power Tools 3)进行反向工程。在这里可以找到这样做的示例 这样做的唯一问题是数据库对象的名称。我的数据库对象使用小词和下划线作为空格,例如:item\u cart。但是,我不想将这种命名标准传递给我的C#应用程序 然后我尝试调整模板,将每个表/字段名转换为符合应用程序命名标准的名称。这是目前我所做的转换工具 public static string SqlNameToEntit

目前我正在使用EF 5.0.0和EF电动工具3。我正在尝试从一个现有的数据库中首先使用反向工程代码(Power Tools 3)进行反向工程。在这里可以找到这样做的示例

这样做的唯一问题是数据库对象的名称。我的数据库对象使用小词和下划线作为空格,例如:item\u 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\u cart
转换为
ItemCart
(虽然尚未测试)

最后,我的问题是:

  • 目前,我无法按照命名约定将.cs文件名更改为。所以它仍然是item_cart.cs
  • 我的方法将来会出问题吗
  • 还有更好的(标准/清洁)方法吗
  • 除了这种逆向工程之外,将表(可能是视图和过程)映射到实体的最佳(最快、最干净)方法是什么

可能的相关问题:

我已经清楚地说明了我的问题吗?有人能回答这个问题吗?