5

POCO T4テンプレートを変更して、各プロパティに対応するデータベースの列の名前を含めようとしています。従来の理由により、データベーステーブルは8.3であり、列は最大10文字であるため、簡略化される傾向があります。特定のプロパティがどの列に対応しているかをすばやく検索できると、大きな助けになります。

それを考えると、私はこれを行う方法がわかりません。T4テンプレートを編集するというアイデアには満足していますが、EdmPropertyオブジェクトから列名を取得する方法がわかりません。

誰かが私を正しい方向に向けることができますか?

4

2 に答える 2

1

これについては他の回答ですでに説明しましたが、わかりません。問題は、この情報を取得するには、マッピングの MSL 部分 (列がプロパティにマップされる部分) を参照する必要があることです。残念ながら、MSL メタデータ アイテムの API 全体は内部的なものです (将来の EF リリースの目標の 1 つは、それを公開することだと思います)。クラス生成用の T4 テンプレートがある場合、通常は CSDL を使用します。これはエンティティの説明であり、エンティティの EDMX ダイアグラムとプロパティ ウィンドウに表示される情報のみが含まれます。

于 2012-08-13T08:40:19.527 に答える
0

これがこの問題を解決するための最良の方法だとは言いませんが、これが私がやった方法です。BoundField asp コントロールにバインドするためにプレーンテキストで列名を取得できるようにする必要がありましたが、それは EF テンプレートに焼き付けられていませんでした。

そのため、「単純なプロパティ」、つまり列名をロードするだけのこのコードを追加して、それを可能にしました。「ColumnNames」と呼ばれる「テーブル」オブジェクトに構造体を追加し、列名を const 文字列として公開します。

<#
    if (simpleProperties.Any())
    {
#>
    public struct ColumnName 
    {
  <# 
      foreach (var simpleProperty in simpleProperties)
      {
  #>
      public const string <#= simpleProperty #> = "<#= simpleProperty #>";
  <# 
      }
  #>
  }
<#  }
#>
}

これを、ソリューションの edmx ファイルの下に個々のファイルを生成する T4 テンプレートのこのコードの前に配置しました。

<#
    EndNamespace(code);
}

これにより、次のようなコードが作成されます。

public partial class JobPosting
{
    public int PositionRowId { get; set; }
    public System.Guid PositionRelatedGuid { get; set; }

    public struct ColumnName 
    {
        public const string PositionRowId = "PositionRowId";
        public const string PositionRelatedGuid = "PositionRelatedGuid";
    }
}

これが役立つことを願っています。

于 2014-06-17T16:23:35.953 に答える