我正在使用 EF 4.0 和 POCO。我在将记录插入数据库时偶然发现了这个错误。
对象“BI.Entities.QualityReason”上的属性访问器“QualityReasonID”引发以下异常:“对象与目标类型不匹配。”
将新记录保存到数据库后,Databind 到 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 类。这感觉就像我做错了什么。有什么想法吗?