数据库到实体命名转换

时间:2013-04-07 10:19:57

标签: c# entity-framework naming-conventions reverse-engineering ef-power-tools

目前我正在使用带有EF Power Tools 3的EF 5.0.0。我正在尝试使用逆向工程代码从现有数据库进行逆向工程(Power Tools 3)。可以在此MSDN Link找到执行此操作的示例。

执行此操作的唯一问题是我的数据库对象的名称。我的数据库对象使用小词和下划线作为空格,例如: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
  • 我的方法将来会出问题吗?
  • 还有更好的(标准/清洁)方法吗?
  • 除了这种逆向工程之外,将表(可能是视图和程序)映射到实体的最佳(最快和最干净)方法是什么?

可能的相关问题:Resolving naming convention conflict between entities in EF4 and our database standards?

0 个答案:

没有答案