Entity framework EF 4.0动态代理POCO对象与目标类型不匹配

Entity framework EF 4.0动态代理POCO对象与目标类型不匹配,entity-framework,entity-framework-4,poco,dynamic-proxy,Entity Framework,Entity Framework 4,Poco,Dynamic Proxy,我正在使用EF4.0和POCO。我在将to记录插入数据库时偶然发现了这个错误 对象“BI.Entities.QualityReason”的属性访问器“QualityReasonID”引发了以下异常:“对象与目标类型不匹配。” 将新记录保存到数据库后,数据绑定到GridView时会出现错误。我确定发生了什么,但我不确定为什么会发生,或者我是否错误地使用了EF/POCO。如有任何见解,将不胜感激 发生异常是因为IEnumerable中的对象类型不同。 表中的原始条目类型为System.Data.En

我正在使用EF4.0和POCO。我在将to记录插入数据库时偶然发现了这个错误

对象“BI.Entities.QualityReason”的属性访问器“QualityReasonID”引发了以下异常:“对象与目标类型不匹配。”

将新记录保存到数据库后,数据绑定到GridView时会出现错误。我确定发生了什么,但我不确定为什么会发生,或者我是否错误地使用了EF/POCO。如有任何见解,将不胜感激

发生异常是因为IEnumerable中的对象类型不同。 表中的原始条目类型为System.Data.Entity.DynamicProxies.QualityReason_E483AD567288B459706092F1825F53B1F93C65C5329F8095DD1D848B5D039F04} 而新的是BI.Entities.qualtyreason

下面是我如何插入新对象的

   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 fetchQualityReasons()
{
IEnumerable queryReasons=dbcontext.QualityReasons.AsEnumerable();
返回查询原因;
}

public IEnumerable fetchQualityReasons()
{
IEnumerable queryReasons=来自dbcontext.QualityReasons.AsEnumerable()中的数据
选择新的质量原因
{
QualityReasonID=data.QualityReasonID,
QualityReasonName=data.QualityReasonName
};
返回查询原因;
}

因此,为了避免这个错误,我每次都必须显式地选择POCO类。这感觉我好像出了什么问题。有什么想法吗?

我不知道问题是否已经解决,但我的(POCO)“场景”课程也遇到了同样的问题


使用
context.CreateObject
创建(POCO)对象i.s.o.a.…=new Scenario()。

导致此错误的原因是GridView在使用boundfields时不处理多态数据源。所以你有两个选择

  • 改用TemplateFields,它可以处理多态数据源,这可能会更改一些前端代码和GridView事件

  • 使用Linq创建boundfields可以处理的非多态数据源

      So instead of using something like ti 
    
        gvGroups.DataSource = ProductHelper.Get()
        gvGroups.DataBind();
    
    
    
        var query = from p in ProductHelper.Get()
        select new {p.ProductId, p.ProductName, p.ProductDesc, p.ProductLink};
        gvGroups.DataSource = query;
        gvGroups.DataBind();
    

  • 今天面临着同样的问题,并且曾经解决过。简单到:

    var dynamicProxyMember = _repository.FindOne<Member>(m=>m.Id = 1);
    var member = new Member().InjectFrom(dynamicProxyMember) as Member;
    
    var dynamicproxy成员=_repository.FindOne(m=>m.Id=1);
    var member=new member().InjectFrom(dynamicProxyMember)作为成员;
    

    就是这样:)

    我认为问题可能更多地与gridview和数据绑定有关,而不是与EF有关。
    var dynamicProxyMember = _repository.FindOne<Member>(m=>m.Id = 1);
    var member = new Member().InjectFrom(dynamicProxyMember) as Member;