Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.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# 如何检查是否填充了子对象_C#_Linq To Sql - Fatal编程技术网

C# 如何检查是否填充了子对象

C# 如何检查是否填充了子对象,c#,linq-to-sql,C#,Linq To Sql,如何检查linq对象的子对象是否已填充?下面是示例代码 我的模型有两种方法,一种连接数据,另一种不连接: public static Member GetMemberWithPhoto(Guid memberId) { using (DataContext db = new DataContext()) { DataLoadOptions dataLoadOptions = new DataLoadOptions(); dataLoadOption

如何检查linq对象的子对象是否已填充?下面是示例代码

我的模型有两种方法,一种连接数据,另一种不连接:

public static Member GetMemberWithPhoto(Guid memberId)
{
    using (DataContext db = new DataContext())
    {
        DataLoadOptions dataLoadOptions = new DataLoadOptions();
        dataLoadOptions.LoadWith<Member>(x => x.UserPhoto);
        db.LoadOptions = dataLoadOptions;

        var query = from x in db.Members
                    where x.MemberId == memberId
                    select x;

        return query.FirstOrDefault();
    }
}

public static Member GetMember(Guid memberId)
{
    using (DataContext db = new DataContext())
    {
        var query = from x in db.Members
                    where x.MemberId == memberId
                    select x;

        return query.FirstOrDefault();
    }
}
最后一行将生成“无法访问已处置对象”异常。我知道我可以通过不处理datacontext来消除这个异常,但是最后一行将生成一个新的数据库查询,我不希望这样

我想要的是:

Debug.WriteLine((member1.UserPhoto.IsPopulated()) ? member1.UserPhoto.ToString() : "none");
Debug.WriteLine((member2.UserPhoto.IsPopulated()) ? member2.UserPhoto.ToString() : "none");

是否可能?

设置属性是否定义为EntitySet?如果是,那么您应该能够检查HasLoadedOrAssignedValues属性:

Debug.WriteLine(member1.Settings.HasLoadedOrAssignedValues ? member2.Settings.Count : -1);

设置属性是否定义为EntitySet?如果是,那么您应该能够检查HasLoadedOrAssignedValues属性:

Debug.WriteLine(member1.Settings.HasLoadedOrAssignedValues ? member2.Settings.Count : -1);

你当然是对的。然而,我刚刚意识到我遇到问题的代码不是entityset,而是数据库中的一对一关系。我已经相应地更新了这个问题。一对一的属性访问器是什么样子的?它是否访问EntityRef类型的字段?如果是这样,您可以创建另一个属性IsUserPhotoPopulated(可能在部分类上),该属性对字段进行检查,如下所示_userPhoto.hasloadeOrassignedValue。或者,修改getter的逻辑以自行执行此检查,尽管当您重新生成实体模型(如果它是自动生成的)时,它将被覆盖。成员和UserPhoto对象都是通过visual studio中的dbml文件从相应的表中自动生成的,据我所知,在任何地方都没有EntityRef。我可以在部分类中创建新属性,但我不知道这是否有帮助。我也可以修改查询的逻辑,但这是一个包含大量旧代码的大型项目,有些连接数据,有些不连接,因此我更希望存在其他方法。如果在designer.cs中查看UserPhoto的acessor属性,它看起来像什么?它应该访问EntityRef的一个字段,除非您的Linq to SQL生成的代码与我的不同!我在分部类中为名为HasUserPhoto的成员创建了一个新属性,并带有“return this.\u UserPhoto.HasLoadedOrAssignedValue;”。您当然是正确的。然而,我刚刚意识到我遇到问题的代码不是entityset,而是数据库中的一对一关系。我已经相应地更新了这个问题。一对一的属性访问器是什么样子的?它是否访问EntityRef类型的字段?如果是这样,您可以创建另一个属性IsUserPhotoPopulated(可能在部分类上),该属性对字段进行检查,如下所示_userPhoto.hasloadeOrassignedValue。或者,修改getter的逻辑以自行执行此检查,尽管当您重新生成实体模型(如果它是自动生成的)时,它将被覆盖。成员和UserPhoto对象都是通过visual studio中的dbml文件从相应的表中自动生成的,据我所知,在任何地方都没有EntityRef。我可以在部分类中创建新属性,但我不知道这是否有帮助。我也可以修改查询的逻辑,但这是一个包含大量旧代码的大型项目,有些连接数据,有些不连接,因此我更希望存在其他方法。如果在designer.cs中查看UserPhoto的acessor属性,它看起来像什么?它应该访问EntityRef的一个字段,除非您的Linq to SQL生成的代码与我的不同!我在分部类中为名为HasUserPhoto的成员创建了一个新属性,并带有“return this.\u UserPhoto.HasLoadedOrAssignedValue;”。