从分部类挂接到get方法时未加载EF导航属性

本文关键字:加载 EF 属性 导航 方法 get | 更新日期: 2023-09-27 18:05:36

我将实体框架与asp.net mvc应用程序结合使用,并使用数据库优先的方法。我从edmx定制了一点代码生成,以便能够挂接到我的实体属性的get方法中,如下所示:

public partial class CA
{
    private string _PropX;
    partial void OnGetPropX(ref string value);
    public string PropX
    {
        get
        {
            string value= _PropX;
            this.OnGetPropX(ref value);
            return value;
        }
        set
        {
            this._PropX= value;
        }
    }
    public virtual CB B { get; set; }
}

正如您所看到的,CB还有一个导航属性。在我的非生成部分类A中,我挂接到PropX的get方法,以返回CB上的一个属性,如下所示:

public partial class CA
{
    partial void OnGetPropX(ref string value)
    {
        if(String.IsNullOrEmpty(value))
            value= this.B.PropY;  // Error
    }
}

但事实证明是这样的。在标有//错误的行中,B始终为Null。然而,如果我在未生成的部分类CA中创建一个新属性,如下面所示,一切都很好:

public string MyPropX
{
    get
    {
        return (String.IsNullOrEmpty(this.PropX) ? this.B.PropY: this.PropX);
    }
}

有人能向我解释一下这种行为吗?也许可以告诉我如何让第一种方法发挥作用?谢谢

从分部类挂接到get方法时未加载EF导航属性

随机猜测。。。但也许将您的属性更改为非虚拟会阻止EF正确创建代理。。。尝试执行public virtual string PropX。。。