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

C# 从分部类挂接到get方法时未加载EF导航属性,c#,asp.net,entity-framework,C#,Asp.net,Entity Framework,我将实体框架与asp.NETMVC应用程序结合使用,并使用数据库优先的方法。我对edmx的代码生成进行了一些定制,以便能够钩住实体属性的get方法,如下所示: public partial class CA { private string _PropX; partial void OnGetPropX(ref string value); public string PropX { get { string

我将实体框架与asp.NETMVC应用程序结合使用,并使用数据库优先的方法。我对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; }
}
public partial class CA
{
    partial void OnGetPropX(ref string value)
    {
        if(String.IsNullOrEmpty(value))
            value= this.B.PropY;  // Error
    }
}
如您所见,CB还有一个导航属性。在我未生成的部分类A中,我钩住PropX的get方法以返回CB上的属性,如下所示:

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; }
}
public partial class CA
{
    partial void OnGetPropX(ref string value)
    {
        if(String.IsNullOrEmpty(value))
            value= this.B.PropY;  // Error
    }
}
但事实证明,在标有//Error的行中,这个.B总是空的。 但是,如果我在未生成的分部类CA中创建一个新属性,如以下所示,一切正常:

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

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

随机猜测…但可能将您的属性更改为非虚拟会阻止EF正确创建代理…请尝试使用公共虚拟字符串PropX…

虚拟仅用于导航属性。