私はEF4.0とPOCOを使用しています。データベースにレコードを挿入しているときに、このエラーに遭遇しました。
オブジェクト「BI.Entities.QualityReason」のプロパティアクセサ「QualityReasonID」が次の例外をスローしました:「オブジェクトがターゲットタイプと一致しません」。
新しいレコードをデータベースに保存した後、GridViewへのデータバインドでエラーが発生します。何が起こっているのかを特定しましたが、なぜそれが起こっているのか、またはEF/POCOを誤って使用しているかどうかはわかりません。任意の洞察をいただければ幸いです。
IEnumerableのオブジェクトタイプが同じではないため、例外が発生しています。テーブルの元のエントリのタイプはSystem.Data.Entity.DynamicProxies.QualityReason_E483AD567288B459706092F1825F53B1F93C65C5329F8095DD1D848B5D039F04}ですが、新しいエントリはBI.Entities.QuailtyReasonです。
これが私が新しいオブジェクトを挿入する方法です。
public void createQualityReason(QualityReason qReasons)
{
dbcontext.QualityReasons.AddObject(qReasons);
dbcontext.SaveChanges();
}
フェッチコードを次の場所から変更することでエラーを解決しました。
public IEnumerable<QualityReason> fetchQualityReasons()
{
IEnumerable<QualityReason> queryReasons = dbcontext.QualityReasons.AsEnumerable();
return queryReasons;
}
に
public IEnumerable<QualityReason> fetchQualityReasons()
{
IEnumerable<QualityReason> queryReasons = from data in dbcontext.QualityReasons.AsEnumerable()
select new QualityReason
{
QualityReasonID = data.QualityReasonID,
QualityReasonName = data.QualityReasonName
};
return queryReasons;
}
したがって、エラーを回避するには、毎回明示的にPOCOクラスを選択する必要があります。これは私が何か間違っているように感じます。何かご意見は?