C# 从分部类挂接到get方法时未加载EF导航属性
我将实体框架与asp.NETMVC应用程序结合使用,并使用数据库优先的方法。我对edmx的代码生成进行了一些定制,以便能够钩住实体属性的get方法,如下所示: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
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…虚拟仅用于导航属性。