Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
Entity framework 将对象添加到上下文并从关系中获取属性_Entity Framework_Entity Framework 4.1_Ef Code First_Entity Relationship_Code First - Fatal编程技术网

Entity framework 将对象添加到上下文并从关系中获取属性

Entity framework 将对象添加到上下文并从关系中获取属性,entity-framework,entity-framework-4.1,ef-code-first,entity-relationship,code-first,Entity Framework,Entity Framework 4.1,Ef Code First,Entity Relationship,Code First,我不久前编写了一些代码,首先使用实体框架代码将对象添加到表中 Context.Reactions.Attach(reaction); Context.SaveChanges(); 之后,我使用一个名为Profile的关系来获取发布反应的用户的姓名 reaction.Profile.FirstName + " " + reaction.Profile.LastName 现在过了一段时间,当我试图获取此人的姓名时,我在个人资料上得到了一个空引用 那么为什么我不能添加一个对象,然后再使用Profi

我不久前编写了一些代码,首先使用实体框架代码将对象添加到表中

Context.Reactions.Attach(reaction);
Context.SaveChanges();
之后,我使用一个名为Profile的关系来获取发布反应的用户的姓名

reaction.Profile.FirstName + " " + reaction.Profile.LastName
现在过了一段时间,当我试图获取此人的姓名时,我在个人资料上得到了一个空引用

那么为什么我不能添加一个对象,然后再使用Profile关系呢

编辑: 我正在获取配置文件关系属性的nullreference。所以反应,档案上说是空的。这是同一个例子。实体框架给了我一个反应的id,因此savechanges()可以工作。 获取FirstName的行是SaveChanges之后的直接行,因此无法正确处理上下文

完整代码:

var reaction = new Reaction()
                                {
                                    Text = reactionText,
                                    ProfileId = CurrentProfileId,
                                    PostedOn = DateTime.Now
                                };

                    //Save changes to the backend
                    context.Reactions.Add(reaction);
                    context.SaveChanges();

                    return Json(new
                    {
                        Id = reaction.Id,
                        ReactionType = reactionType,
                        ReactionTypeId = reactionTypeId,
                        ReactionText = reaction.Text,
                        PostedOn = reaction.PostedOn.ToString("G"),
                        ProfileName = string.Format("{0} {1}", reaction.Profile.FirstName, reaction.Profile.LastName)
                    });
我甚至试着用这个代码来解释它

using (var context = new SeeTingsContext())
                {
                    context.Configuration.LazyLoadingEnabled = true;


                }

过了一会儿,当我读到
时,我没有完全理解你的意思。这是否意味着您首先获取关系对象,然后它突然变为null?
我的猜测是:

  • 对于您正在处理的上下文,您尚未将
    LazyLoadingEnabled
    设置为true
  • 您的上下文已被释放,因此您无法使用它来获取关系。请注意,可以在上下文仍然存在时使用延迟加载
更新:根据注释,尝试显式加载关系,查看是否可以获取配置文件:

if (!context.Entry(reaction).Reference(r => r.Profile).IsLoaded)
{
    context.Entry(reaction).Reference(r => r.Profile).Load();
}  

如果您无法使用这种方式获取概要文件,我想您的映射可能有问题。

您在同一个反应实例上获得了null reference异常?不是一个新的问题吗?我在上面添加了我的问题以获取更多信息。是的,过了一段时间,我的意思是它工作了1.5个月,但突然它不工作了。我看Team Foundation服务器,什么都没变。我在上下文中也找不到任何区别。正如您所看到的,代码应该是正确的。id不为null,因此savechanges有效//仅显式加载配置文件关系Context.Entry(reaction.Reference)(r=>r.Profile.Load();我将此代码放在SaveChanges()之后。你知道为什么必须这样做吗?@LockTar:这是在你没有启用延迟加载的时候。它显式加载引用/集合关系。奇怪的是你不能用懒散的方式。您正在使用WCF RIA服务吗?如果是这样,Lazyloading将被禁用,并且由于序列化问题而无法轻松启用。