2010-06-22 50 views
3

我正在使用EF 4.0和POCO's。在插入到數據庫中的記錄時,我偶然發現了這個錯誤。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類明確每一次的錯誤。這感覺就像我錯了。有什麼想法嗎?

+0

我想這個問題可能更多地做與GridView和數據比EF結合。 – 2010-06-22 18:03:51

回答

1

我不知道問題是否已經解決,但是我的問題與我的(POCO)「情景」類相同。

使用context.CreateObject<Scenario>創建(POCO)對象i.s.o時,問題消失。 a .... = new Scenario()。

2

該錯誤是由於GridView在使用綁定字段時未處理多態數據源而導致的。所以,你有兩個選擇

  1. 使用模板列代替,它可以處理多態數據源,這可能會改變你的一些前端代碼和GridView事件。

  2. 使用LINQ創建一個非多態性databsource的綁定列可以處理

    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(); 
    
1

面臨着同樣的問題,今天和使用Value Injecter來解決它。它是那樣簡單:

var dynamicProxyMember = _repository.FindOne<Member>(m=>m.Id = 1); 
var member = new Member().InjectFrom(dynamicProxyMember) as Member; 

就是這樣:)

相關問題