【问题标题】:Class that is member of another class is always null [duplicate]作为另一个类的成员的类始终为空 [重复]
【发布时间】:2020-10-27 12:23:34
【问题描述】:

我首先使用实体​​框架代码处理 C# WPF 项目。

我有一个类,它的成员是另一个类的实例。我正在尝试访问成员类的属性值。我可以通过这种方式获得价值:

var com = context.MyParentClass.Where(p => (p.Identity == id)).Select(c =>
                            new
                            {
                                id = c.Identity,
                                PropertyValue = c.MyChildClass.PropertyValue
                            }
                             );

                    foreach(var item in com)
                    {
                        string xx = item.PropertyValue;
                        MessageBox.Show(xx);
                    }

但是当我尝试在没有选择的情况下获取值时,成员类始终为空:

var com = db.MyParentClass.SingleOrDefault(b => b.Identity == id);
                    string xx = com.MyChildClass.PropertyValue; //MyChildClass is null
                    MessageBox.Show(xx);

有人知道这里发生了什么吗?如何解决空问题?

【问题讨论】:

标签: c# wpf entity-framework null


【解决方案1】:

您必须确保是否启用延迟加载。

  1. context.Configuration.ProxyCreationEnabled 应该是真的。
  2. context.Configuration.LazyLoadingEnabled 应该是真的。
  3. 导航属性应定义为publicvirtual。这 如果属性未定义为,上下文将不会进行延迟加载 虚拟的。

您也可以使用Include 进行预加载。感谢@CodeCaster 的建议。

参考https://www.entityframeworktutorial.net/lazyloading-in-entity-framework.aspx

【讨论】:

  • 这在技术上是可行的,但您通常不希望延迟加载。 OP 只需要Include()
  • 是的,他也可以使用急切加载
  • 成功了,谢谢!
猜你喜欢
  • 2014-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多