2015-03-13 120 views
0

有時,當我調用保存更改dbcontext時,我得到一個空引用異常。這隻發生在幾個場景中。Entity Framework - NullReferenceException在System.Data.Objects.DataClasses.RelatedEnd.GetOtherEndOfRelationship

失敗時,我做了以下。

entityObject.SomeForeignKeyId = X其中X是整數;

相同的代碼工作爲

entityObject.SomeForeignKeyId = Y,其中Y是一個整數,並且不等於 X;

以便周圍的工作我們已經使用

entityObject.SomeForeignKey = Repository.Some.Find(X);

System.Web.HttpUnhandledException(0x80004005):類型爲 的異常'System.Web.HttpUnhandledException'被拋出。 ---> System.NullReferenceException:對象引用未設置爲對象的實例 。在 System.Data.Objects.DataClasses.RelatedEnd.GetOtherEndOfRelationship在 System.Data(IEntityWrapper wrappedEntity)在 System.Data.Objects.EntityEntry.AddRelationshipDetectedByForeignKey(詞典2 relationships, Dictionary 2個principalRelationships,的EntityKey relatedKey,EntityEntry relatedEntry,RelatedEnd relatedEndFrom) .Objects.EntityEntry.DetectChangesInForeignKeys()處System.Data.Objects.ObjectStateManager.DetectChanges System.Data.Objects.ObjectStateManager.DetectChangesInForeignKeys(IList`1 項)()

我們使用EF 4.3

回答

0

由於在其中一個導航屬性上沒有對應的FK列,因此可能會遇到此問題。通過匹配PK-FK對檢查所有相關的POCO類及其關係。另一方面,您可以查看數據表的數據庫圖來檢查模式上的關係。請讓我知道它是否解決了問題,並在此發佈您的POCO類定義。希望這有助於...

0

這是一個答案,老問題,但萬一別人遇到它:使用JSONPatch方法,直接修補改變到EF實體

我的問題有關。該補丁應用得很好,但是當我從許多方面消除了一對多關係中的引用時,我遇到了這個錯誤。例如:

public class Foo 
{ 
    public int Id {get; set;} 
    public int? MyBar_Id {get; set;} 
    public Bar MyBar {get; set;} 
} 

public class Bar 
{ 
    public int Id {get; set;} 
    public List<Foo> MyFoos {get; set;} 
} 

,如果我只是加載美孚作爲DynamicProxy和使用我JSONPatch只設置MyBar屬性設置爲null,我遇到了這個錯誤。然而我注意到,當我用調試器檢查對象時,行爲發生了顯着變化。如果我在應用修補程序之前檢查它,將MyBar設置爲空時,MyBar_Id也爲空,並且在保存更改時它很好。如果我以後檢查過,那麼MyBar_Id不爲空,我會遇到這個錯誤。

我的解決方案是調整JSONPatch過程,並在將屬性設置爲null之前檢​​查它是否已具有值。如果是,並且它也是EF映射對象,請檢索它(強制延遲初始化),然後使用反射來獲取它自己的所有屬性。這會強制所有對象屬性的初始化,在雙方都加載FK,並且問題已解決。

這是一個錯誤的地獄,解決方法是可怕的,但它確實解決了這個問題。