C# 如果接口返回导航属性,是否应将其实现为虚拟属性?
我有一个接口C# 如果接口返回导航属性,是否应将其实现为虚拟属性?,c#,entity-framework,interface,ef-code-first,xaf,C#,Entity Framework,Interface,Ef Code First,Xaf,我有一个接口 public interface ITask { IPart Part { get; set; } } 当我实现这个接口时,编译器会满意的 public virtual IPart Part { get; set; } 或 但是,EF需要该属性是虚拟的 我总是忘记用正确的方法来实现它。我有没有办法保证它一定是这样的 注:我完成以下界面: public virtual IPart Part { get { return TemplatePart; } se
public interface ITask
{
IPart Part { get; set; }
}
当我实现这个接口时,编译器会满意的
public virtual IPart Part { get; set; }
或
但是,EF需要该属性是虚拟的
我总是忘记用正确的方法来实现它。我有没有办法保证它一定是这样的
注:我完成以下界面:
public virtual IPart Part
{
get { return TemplatePart; }
set { TemplatePart = (TemplatePart)value; }
}
“虚拟”是否因为我没有声明导航属性而实际上无关紧要?我唯一能建议的是,如果您使用VS 2015,您可以编写自己的,它将根据某些标准执行此检查(例如,使用特定属性标记所有此类接口)@alexei levenkov我将问题标题改为问题的第二部分,以避免重复。这样可以吗?我想答案可能是,只有当有东西需要覆盖它时,它才需要是虚拟的。对于只返回另一个属性的强制转换的属性,情况并非如此。强制转换到一个实现会破坏接口的用途。另外,我想知道你将如何使用EF,它不支持接口。此外,EF不需要属性是虚拟的。如果你想延迟加载,你可能需要它。我不认为有任何理由强制将延迟加载作为标准行为。@GertArnold我正在Dev Express XAF中设置我的业务类。它们首先充当代码的EF业务类,XAF也从它们生成UI。因此存在接口。(为没有在之前标注该标签而道歉)
public virtual IPart Part
{
get { return TemplatePart; }
set { TemplatePart = (TemplatePart)value; }
}