3

Entity Framework Code First を、EntityTypeConfiguration から継承するマップ クラスで使用しています。これは、エンティティを構成するための Code First fluent API の使用をカプセル化するために行います。

これらのクラスで行われた構成設定を調べて、それらのいくつかを統合テストに適用できるようにしたいと考えています。AutoFixture を使用してエンティティをすばやく作成していますが、最終的には、EntityTypeConfiguration クラス内の構成を使用するカスタマイズを行う方法を見つけたいと考えています。

でもまず、それらを引き出す方法を考える必要があります...

使用例を次に示します。

public class Widget { public string Name { get; set; } }
public class WidgetMap : EntityTypeConfiguration<Widget> {
   this.Property(w => w.Name).HasMaxLength(10);
}

この擬似コードのようなことをするにはどうすればよいですか:

public Widget GetWidgetHonoringStringLengthConstraints(WidgetMap map) {
   var w = new Widget();
   int maxLength = map.GetProperty(p => p.Name).GetMaxLength(); //MAGIC
   string name = new Guid().SubString(0, maxLength);
   w.Name = name;
   return w;
}
4

1 に答える 1

1

Entity Framework Codeplex Discussionsで Arthur Vickers から返信を受け取りました。

基本的に、彼は私が間違ったツリーを吠えていると言いました。設計上、構成クラスが通常のパブリック サーフェスから検査されることを望んでいなかったからです。API を汚染し、何かを見つけようとする考えです。文字列の最大長は多くの場合、ストーリー全体ではなくストーリーを伝えます (最終的な最大長の制限は、デフォルト設定を含むいくつかの慣習に由来する可能性があります)。 .

彼は、次のようにアクセスできるMetadataWorkspaceを介して、構築後にモデルからメタデータを取得することを推奨しました。

((IObjectContextAdapter)myDbContext).ObjectContext.MetadataWorkspace

私はまだこれを実装することを追求していませんが、誰かが別の回答を提出するまで、これを回答としてマークします (私がそれに慣れる前の例、または別のオプション)。

于 2014-10-31T17:12:29.417 に答える