Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无任何内容为空时出现NullReferenceException?_C#_Entity Framework_Nullreferenceexception - Fatal编程技术网

C# 无任何内容为空时出现NullReferenceException?

C# 无任何内容为空时出现NullReferenceException?,c#,entity-framework,nullreferenceexception,C#,Entity Framework,Nullreferenceexception,我正在测试(集成)我的存储库层,我不断从EF得到一个空引用错误。我关心的是,当我运行调试器时,对象null中没有任何内容。事实上,整个方法中没有空值。所有的属性都在Automapper中正确设置,我对所有内容都使用真实(而不是模拟)值。它们都在那里,并且使用真实版本的代码 测试: 堆栈跟踪: System.NullReferenceException : Object reference not set to an instance of an object. at System.Data.En

我正在测试(集成)我的存储库层,我不断从EF得到一个空引用错误。我关心的是,当我运行调试器时,对象null中没有任何内容。事实上,整个方法中没有空值。所有的属性都在Automapper中正确设置,我对所有内容都使用真实(而不是模拟)值。它们都在那里,并且使用真实版本的代码

测试:

堆栈跟踪:

System.NullReferenceException : Object reference not set to an instance of an object.
at System.Data.Entity.Core.Objects.DataClasses.RelatedEnd.MarkForeignKeyPropertiesModified()
at System.Data.Entity.Core.Objects.DataClasses.EntityReference.AddToNavigationPropertyIfCompatible(RelatedEnd otherRelatedEnd)
at System.Data.Entity.Core.Objects.DataClasses.RelatedEnd.IncludeEntity(IEntityWrapper wrappedEntity, Boolean addRelationshipAsUnchanged, Boolean doAttach)
at System.Data.Entity.Core.Objects.DataClasses.EntityCollection`1.Include(Boolean addRelationshipAsUnchanged, Boolean doAttach)
at System.Data.Entity.Core.Objects.DataClasses.RelationshipManager.AddRelatedEntitiesToObjectStateManager(Boolean doAttach)
at System.Data.Entity.Core.Objects.ObjectContext.AddObject(String entitySetName, Object entity)
at System.Data.Entity.Internal.Linq.InternalSet`1.<>c__DisplayClassd.<Add>b__c()
at System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action, EntityState newState, Object entity, String methodName)
at System.Data.Entity.Internal.Linq.InternalSet`1.Add(Object entity)
at System.Data.Entity.DbSet`1.Add(TEntity entity)
at Repositories.UserRepository.Clone(CloneUserRequest request) in UserRepository.cs: line 39
at Repositories.UserRepositoryIntegrationTests.Clone_ShouldCloneUser() in UserRepositoryIntegrationTests.cs: line 50
System.NullReferenceException:对象引用未设置为对象的实例。
位于System.Data.Entity.Core.Objects.DataClasses.RelatedEnd.MarkForeignKeyPropertiesModified()处
位于System.Data.Entity.Core.Objects.DataClasses.EntityReference.AddToNavigationPropertyIfCompatible(RelatedEnd otherRelatedEnd)
位于System.Data.Entity.Core.Objects.DataClasses.RelatedEnd.IncludeEntity(IEntityWrapper wrappedEntity,Boolean AddRelationshipAsunched,Boolean doAttach)
位于System.Data.Entity.Core.Objects.DataClasses.EntityCollection`1.Include(Boolean addRelationshipAsUnchanged,Boolean doAttach)
位于System.Data.Entity.Core.Objects.DataClasses.RelationshipManager.AddRelatedEntities到ObjectStateManager(布尔doAttach)
位于System.Data.Entity.Core.Objects.ObjectContext.AddObject(字符串entitySetName,对象实体)
在System.Data.Entity.Internal.Linq.InternalSet`1.c__DisplayClassd.b__c()中
位于System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(操作操作,EntityState新闻状态,对象实体,字符串方法名)
位于System.Data.Entity.Internal.Linq.InternalSet`1.Add(对象实体)
at System.Data.Entity.DbSet`1.Add(TEntity实体)
在UserRepository.cs中的Repositories.UserRepository.Clone(CloneUserRequest请求)处:第39行
在UserRepositoryIntegrationTests.cs中的Repositories.UserRepositoryIntegrationTests.Clone_应该克隆用户():第50行

EF中是否有明显的缺失或缺陷?

我发现了问题所在。我们的数据库结构很糟糕,在WebUserGroup(它有一个子WebUser)和WebUser(它有WebUserGroup的集合)之间实际上有一个循环引用。因此,当我为用户克隆所有用户组时,它引用了我最初克隆的用户。不知何故,EF决定向我发送一个nullReferenceException。当我将组上的WebUser属性更改为新属性时,效果非常好。现在是时候和我的DBA谈谈更新这个…

什么是完整堆栈跟踪?你确定
\u上下文。WebUserGroups
不包含
null
条目吗?你也在调试这个吗?@DStanley抱歉,我知道我忘了something@CodeCaster我已经检查并再次检查了它们的值。尽管我们不得不忍受高薪DBA的工作所带来的痛苦,但他们身上没有任何东西是无效的。
public void Clone(CloneUserRequest request)
{
    var usersGroupsToBeCloned = _context.WebUserGroups.Where(x => x.UserKey == request.KeyToClone).ToList();
    var webUser = _mappingService.Map(request.User, new WebUser());
    webUser.WebUserGroups = usersGroupsToBeCloned;
    //On this line I receive a NullReferenceException, but nothing is null
    _context.WebUsers.Add(webUser);
    _context.SaveChanges();
}
System.NullReferenceException : Object reference not set to an instance of an object.
at System.Data.Entity.Core.Objects.DataClasses.RelatedEnd.MarkForeignKeyPropertiesModified()
at System.Data.Entity.Core.Objects.DataClasses.EntityReference.AddToNavigationPropertyIfCompatible(RelatedEnd otherRelatedEnd)
at System.Data.Entity.Core.Objects.DataClasses.RelatedEnd.IncludeEntity(IEntityWrapper wrappedEntity, Boolean addRelationshipAsUnchanged, Boolean doAttach)
at System.Data.Entity.Core.Objects.DataClasses.EntityCollection`1.Include(Boolean addRelationshipAsUnchanged, Boolean doAttach)
at System.Data.Entity.Core.Objects.DataClasses.RelationshipManager.AddRelatedEntitiesToObjectStateManager(Boolean doAttach)
at System.Data.Entity.Core.Objects.ObjectContext.AddObject(String entitySetName, Object entity)
at System.Data.Entity.Internal.Linq.InternalSet`1.<>c__DisplayClassd.<Add>b__c()
at System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action, EntityState newState, Object entity, String methodName)
at System.Data.Entity.Internal.Linq.InternalSet`1.Add(Object entity)
at System.Data.Entity.DbSet`1.Add(TEntity entity)
at Repositories.UserRepository.Clone(CloneUserRequest request) in UserRepository.cs: line 39
at Repositories.UserRepositoryIntegrationTests.Clone_ShouldCloneUser() in UserRepositoryIntegrationTests.cs: line 50