Entity Framework - NullReferenceException在System.Data.Objects.DataClasses.RelatedEnd.GetOtherEndOfRelationship
有时,当我调用保存更改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
由于在其中一个导航属性上没有对应的FK列,因此可能会遇到此问题。通过匹配PK-FK对检查所有相关的POCO类及其关系。另一方面,您可以查看数据表的数据库图来检查模式上的关系。请让我知道它是否解决了问题,并在此发布您的POCO类定义。希望这有助于...
这是一个答案,老问题,但万一别人遇到它:使用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,并且问题已解决。
这是一个错误的地狱,解决方法是可怕的,但它确实解决了这个问题。