エンティティフレームワーク5(コードファーストアプローチ)を使用して、従来のストアドプロシージャのクラスをパラメータで設定しています。詳細は次のとおりです。 私の問題は、列の名前を異なる名前のプロパティにマップしたいということです(私はErpからの名前が気に入らない)。 私は別の名前を持つプロパティの列名を指定するには、(私はビューまたはテーブルにマップするとき、私は何をすべきかのような)Configurationクラスを使用することを試みたが、ここに私の結果は以下のとおりです。エンティティフレームワークコードファースト - SqlQueryのマッピングの設定
- 私がいない場合(私はDbContextのOnModelCreatingメソッドでそれを追加しません)EFは動作しますが、カラムの名前と正確に一致するプロパティだけをロードします(これは私がこの場合に期待したものです)。他のプロパティはnullです。
- 構成クラスを使用して(DbContextのOnModelCreatingメソッドのmodelBuilderに追加すると)、EFによって「データリーダーが指定された '... Item」と互換性がないという例外が発生します。 "Description 'は、同じ名前のデータリーダーに対応する列を持っていません"と、これは私にとっては非常に奇妙に聞こえます。なぜなら、プロパティDescriptionが列ItemDescriptionにマップされるからです。
設定が結果に影響するが、その仕様が列のマッピングに使用されないのはなぜですか? SqlQueryを使用してこのマッピングを指定する別の方法はありますか?ここで
詳細は以下のとおりです。
マイPOCOクラス:
public class Item
{
public String Id { get; set; }
public String Description { get; set; }
}
設定クラス:
public class ItemConfiguration : EntityTypeConfiguration<Item>
{
public ItemConfiguration()
{
HasKey(x => new { x.Id });
Property(x => x.Id).HasColumnName("Code");
Property(x => x.Description).HasColumnName("ItemDescription");
}
}
ストアドプロシージャは、列 "コード" と「ItemDescriptionでデータを返します";私はこの方法でそれを呼び出す:
var par = new SqlParameter();
par.ParameterName = "@my_par";
par.Direction = ParameterDirection.Input;
par.SqlDbType = SqlDbType.VarChar;
par.Size = 20;
par.Value = ...;
var data = _context.Database.SqlQuery<Item>("exec spItem @my_par", par);
、これで私は、コンテキストに設定を追加します。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new ItemConfiguration());
}
ありがとうございました!
この投稿はとてもうれしいです。私は私と苦労していました。私が必要としていたのは「エグゼクティブ」の部分でした。私はたくさんの例を見つけましたが、誰も「エグゼクティブ」を持っていませんでした。 –