過去数日間、インターネットで私の質問に似たトピックを探しました。私はついにこの質問を自分自身に尋ねることに頼りました。
コード ファーストの方法論と EF 4.3.1 を使用して、ストアド プロシージャの出力を格納するためのコンテキスト クラス、エンティティ クラス、およびクラスを作成しました。コンテキスト クラスには、 を使用して特定のストアド プロシージャを実行するメソッドがありますSqlQuery<T>
。
例:
public IEnumerable<Results> GetData(int id)
{
var parameters = new SqlParameter[] { new SqlParameter("@id", id) };
var result = this.Database.SqlQuery<Result>("Exec dbo.sproc_GetData @id", parameters);
var data= result.ToList<Result>();
return data;
}
デバッグをトレースしていると、データが戻ってきて、データが一致する名前のプロパティにマップされます。ただし、出力には"/"
、名前に が含まれる列があります (例: Info/Data
)。明らかに、そのようなプロパティに名前を付けることはできないため、列属性 ( [Column("Info/Data")]
)を使用して出力をマップできると考えました。
[Column("Info/Data")]
public string InfoData
{
get { return infoData; }
set { infoData= value; }
}
逐語演算子 ( [Column(@"Info/Data")]
) を使用して、テキストを[]
( [Column("[Info/Data]")]
) で囲んでみたり、両方 ( [Column(@"[Info/Data]")]
) を試したりしました。コードをステップ実行すると、一致する列名を持つプロパティが割り当てられていることがわかりますが、列属性を持つプロパティは無視され、割り当て中にステップオーバーされます。
また、エンティティのすべての列に対して fluent-api を試しました。
modelBuilder.ComplexType<Result>().Property(d => d.InfoData).HasColumnName("Info/Data");
しかし、それは次の例外をスローします:
データ リーダーは、指定された 'NameSpace.Result' と互換性がありません。タイプ 'InfoData' のメンバーには、データ リーダーに同じ名前の対応する列がありません。
私のプロジェクトNameSpace.Result
ではクラス (セキュリティのために名前が変更されています) でInfoDatais
あり、fluent-api を使用してマップしようとするプロパティです (対応する sql 列には / が含まれています。例: Info/Data)。
誰かがこの問題に遭遇しましたか?
私の問題が明確でない場合、または以前に質問されたことがある場合は、お知らせください。