代码之家  ›  专栏  ›  技术社区  ›  Ukko

帮助我为实体框架导航属性指定有意义的名称,而不是用户{1,2,3,4,…}

  •  1
  • Ukko  · 技术社区  · 14 年前

    我继承了一个中型数据库,我们正试图在MVC2重写中使用实体框架。我们使用现有的数据库来生成数据模型(.edmx文件),一切都很好。直到我意识到我不能用点符号访问所有的字段。

    appointment.Employee.name   // works fine
    appointment.Supervisor.name // this fails
    appointment.SupervisorID    // works and is an int
    

    当我仔细观察时,我发现第一个成功的案例很可能是侥幸。表中有几列 SupervisorID , SecretaryID , DogGroomerID 所以,所有人都指向 Employee 表并标记为外键。看起来visualstudio几乎做了正确的事情,它只是以所涉及的角色命名所有这些关联,然后附加数字以使它们具有唯一性。所以下面的代码起作用了:

    appointment.Employee1.name // My name
    appointment.Employee7.name // My Boss's Name
    appointment.Employee5.name // Fluffy's groomer's name
    

    但这确实违背了目的。那么,我做错了什么,或者是什么配置错误,使得visualstudio生成了如此明显愚蠢的名称呢?我试着在可视化建模工具中修改它们,结果成功了。重命名 Employee7 Supervisor

    谢谢你的帮助!

    -埃里克

    3 回复  |  直到 14 年前
        1
  •  2
  •   Pavel Shkleinik    13 年前

    可以为实体创建分部类并添加所有必需的属性:

     public partial class Appointment
     {
        public Employee Supervisor
        {
           get
           {
              return this.Employee1;
           }
        }
    }
    
        2
  •  0
  •   marcind    14 年前

    在ASP.NET MVC的上下文中,可以使用 DisplayNameAttribute 向模型中添加元数据。这篇博文可以让你开始: http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-2-modelmetadata.html

        3
  •  0
  •   Ukko    14 年前

    回到这里,真正的问题是在工具链的前面一步。我们只是通过编辑.edmx文件中的名称,以及在数据库更改时非常小心地合并更改来解决问题。不是一个好的解决办法,但你只能花这么多时间在事情上。