如何在模型重建后保留自定义导航属性?

Chr*_*ris 4 c# entity-framework edmx

我有几个从"用户"表到"报告"表的导航属性.生成的导航属性显然是这样访问的:

USER.REPORTs.Where(x => ...)
USER.REPORTs2.Where(x => ...)
USER.REPORTs3.Where(x => ...)
Run Code Online (Sandbox Code Playgroud)

第一个是用户createdId,第二个是UserApprovedId等......基本的东西.

这些很难解释.如果不访问EDMX并检查导航属性,很难分辨您正在导航的属性.

现在我知道我可以在属性管理器中创建自己的End1/End2导航属性,但是如果重新创建模型,这些属性就会丢失.

有没有解决的办法?

ReP*_*rre 5

我没有试过这个,但是这里有一个想法:因为所有实体类型都是部分类,为什么不将Visual Studio生成的导航属性包装在另一个具有方便名称的属性中呢?

在您的设计器文件中,您将拥有以下内容:

public partial class MyEntity : EntityObject
{
    #region Navigation Properties
    public EntityCollection<MyOtherEntity> Other_Entities1
    {
        // ...
    }
    #endregion
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以创建另一个文件来包装导航属性:

public partial class MyEntity
{
    public EntityCollection<MyOtherEntity> OtherEntities
    {
        get { return Other_Entities1;}
    }
}
Run Code Online (Sandbox Code Playgroud)

您将在整个代码中使用上面的属性,因为在Visual Studio生成.edmx文件时使用相同的逻辑,包装属性不会更改.即使包装属性将更改其名称,您也需要在单个位置调整代码.

  • 这似乎起初有效,但包装属性不能用于Linq to Entities ... (2认同)