Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.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# 填充ID时未加载ASP.NET实体框架属性_C#_Asp.net_Entity Framework_Properties_Lazy Loading - Fatal编程技术网

C# 填充ID时未加载ASP.NET实体框架属性

C# 填充ID时未加载ASP.NET实体框架属性,c#,asp.net,entity-framework,properties,lazy-loading,C#,Asp.net,Entity Framework,Properties,Lazy Loading,这是一个到目前为止一直有效的东西,现在它只是,停止了工作(我知道,很奇怪,可能有一些愚蠢的错误…) 我有一个TripsVM,其中包含一个行程列表。我将这些加载到我的服务中,并返回一个列表 当我迭代trips集合并尝试获取trip.TripCategory.Name时,就会出现问题,因为TripCategory是空的,即使TripCategoryID有一个值 这一切都发生在后端,我加载trips,然后尝试迭代它们,它们不是从页面发送的 我可能只需要一个trip一个trip地加载trip,但它过去是

这是一个到目前为止一直有效的东西,现在它只是,停止了工作(我知道,很奇怪,可能有一些愚蠢的错误…)

我有一个
TripsVM
,其中包含一个行程列表。我将这些加载到我的服务中,并返回一个
列表

当我迭代trips集合并尝试获取
trip.TripCategory.Name
时,就会出现问题,因为
TripCategory
是空的,即使
TripCategoryID
有一个值

这一切都发生在后端,我加载trips,然后尝试迭代它们,它们不是从页面发送的

我可能只需要一个trip一个trip地加载trip,但它过去是工作的,这个bug是在使用数月后出现的

任何关于在哪里查找bug的建议都将不胜感激

谢谢

错误:

异常详细信息:System.NullReferenceException:对象引用未设置为对象的实例

发生错误时:

foreach (Trip trip in tripsVM.TripsList) {
    var a = trip.TripCategory.Name;
TripsVM:

    private List<Trip> _TripsList;

    public List<Trip> TripsList
    {
        get
        {
            if (_TripsList == null)
            {
                _TripsList = TripsService.GetTrips();

                if (_TripsList == null)
                    _TripsList = new List<Trip>();
            }

            return _TripsList;
        }
        set { _TripsList = value; }
    }

它看起来像是在foreach代码或LazyLoadingEnabled设置为false之前释放的DB上下文

在服务中添加使用

using System.Data.Entity;
并修改加载方式

public static List<Trip> GetTrips()
{ return DB.Trips.Where(...).Include(t=>t.TripCategory).OrderBy(...).ToList(); }
publicstaticlist GetTrips()
{return DB.Trips.Where(…).Include(t=>t.TripCategory).OrderBy(…).ToList();}

我认为您的代码看起来不错,但您应该添加一些if语句以避免null异常,因为您使用where子句返回某些内容,因此您可能会得到空查询结果和空列表,并且在该列表中,您试图访问列表对象的一个元素:

if(tripsVM.TripsList != null){
     foreach (Trip trip in tripsVM.TripsList) {
     var a = trip.TripCategory.Name;
     }
}

else
{
   // handle empty list
}


 private List<Trip> _TripsList;

        public List<Trip> TripsList
        {
            get
            {
            _TripsList = new List<Trip>();
            if(TripsService.GetTrips() != null)
              {
             _TripsList.add(TripsService.GetTrips());
              }
                return _TripsList;
            }
            set { _TripsList = value; }
        }
if(tripsVM.TripsList!=null){
foreach(tripsVM.TripsList中的跳闸){
var a=trip.TripCategory.Name;
}
}
其他的
{
//处理空列表
}
私人名单(TripsList);;
公开名单
{
得到
{
_TripsList=新列表();
if(TripsService.GetTrips()!=null)
{
_添加(TripsService.GetTrips());
}
返回TripsList;
}
设置{u TripsList=value;}
}

你读过我的Q吗???ofc不是,完全不同的主题,谢谢你把我的Q标记为一个副本来破坏我的Q,先读吧,很抱歉你这么想,但是链接的答案会帮助你。如果你读过它,你就会知道它对我没有帮助。我浏览了那个链接和它关于如何避免null ref错误的大量集合,但是正如我所说的,在我的例子中,null ref错误是一些其他错误的结果,你的帖子对这种情况没有帮助。哇,只是添加using System.Data.Entity帮助了!!非常感谢,我花了大约4个小时来处理这件事。。你能给我指出一个关于这个话题的研究方向吗?我真的不明白为什么它工作了一段时间,现在我不得不添加这个使用和编译器不介意。。。谢谢我高度怀疑仅仅使用添加来修复问题。我猜您的一些代码在上下文中设置LazyLoadingEnabled=false。如果它在GET()之前执行,而不是对象引用出现,否则GETRIPSUTE()将工作良好。无论如何,我认为在代码中添加.Tebug(t= T.TrrType),如果你总是需要.TrpCytType属性信息。嗨,谢谢你的回答,但是IMO在这种情况下是可以的(我在属性里面处理它)。这里的问题是列表已填充,但旅行的导航属性为空。已解决的问题如下:)
public static List<Trip> GetTrips()
{ return DB.Trips.Where(...).Include(t=>t.TripCategory).OrderBy(...).ToList(); }
if(tripsVM.TripsList != null){
     foreach (Trip trip in tripsVM.TripsList) {
     var a = trip.TripCategory.Name;
     }
}

else
{
   // handle empty list
}


 private List<Trip> _TripsList;

        public List<Trip> TripsList
        {
            get
            {
            _TripsList = new List<Trip>();
            if(TripsService.GetTrips() != null)
              {
             _TripsList.add(TripsService.GetTrips());
              }
                return _TripsList;
            }
            set { _TripsList = value; }
        }