帮我给实体框架导航属性有意义的名字,而不是用户{1,2,3,4,...}

时间:2010-08-02 21:27:57

标签: .net entity-framework asp.net-mvc-2 entity-framework-4

我继承了一个中等大小的数据库,我们正在尝试在我们正在进行的MVC2重写中使用Entity Framework。我们使用现有数据库生成数据模型(.edmx文件),一切都很好。直到我意识到我无法使用点符号访问所有字段。

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

当我仔细观察时,我可以看到第一个有效的案例很可能是侥幸。表格中有几列用于SupervisorIDSecretaryIDDogGroomerID之类的内容,所有内容都指向Employee表并标记为外键。看起来Visual Studio几乎做了正确的事情,它只是在涉及的角色之后命名所有这些关联,然后附加数字以使它们成为唯一的。所以下面的代码可以工作:

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

但这确实违背了目的。那么我做错了什么或什么是错误配置会使Visual Studio产生如此明显的愚蠢名称?我尝试在可视化建模工具中更改它们并且它有效。将Employee7重命名为Supervisor会产生预期的效果,但对于我来说,在接下来的10个小时内重命名事物并不是一个可扩展的解决方案。当数据库再次被现场客户加速并且我需要引入新架构时,我们该怎么办?

感谢您提供任何见解和帮助!

-Eric

3 个答案:

答案 0 :(得分:2)

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

 public partial class Appointment
 {
    public Employee Supervisor
    {
       get
       {
          return this.Employee1;
       }
    }
}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

回到这一点,真正的问题是在工具链的早期阶段。我们刚刚解决了编辑.edmx文件中的名称并在数据库更改时非常小心地合并更改的问题。不是一个好的解决方案,但你只能在事情上花费这么多时间。