現在、EF Power Tools 3 で EF 5.0.0 を使用しています。最初にリバース エンジニアリング コード (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 のエンティティとデータベース標準との間の命名規則の競合を解決していますか?