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; }
}