我继承了一个中等大小的数据库,我们正在尝试在我们正在进行的MVC2重写中使用Entity Framework。我们使用现有数据库生成数据模型(.edmx文件),一切都很好。直到我意识到我无法使用点符号访问所有字段。
appointment.Employee.name // works fine
appointment.Supervisor.name // this fails
appointment.SupervisorID // works and is an int
当我仔细观察时,我可以看到第一个有效的案例很可能是侥幸。表格中有几列用于SupervisorID
,SecretaryID
,DogGroomerID
之类的内容,所有内容都指向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
答案 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文件中的名称并在数据库更改时非常小心地合并更改的问题。不是一个好的解决方案,但你只能在事情上花费这么多时间。