Помогите дать значащие имена свойств навигации Entity Framework, а не пользователя {1,2,3,4, ...} - PullRequest
1 голос
/ 03 августа 2010

Я унаследовал базу данных среднего размера, которую мы пытаемся использовать с Entity Framework в переписываемой MVC2, над которой мы работаем. Мы использовали существующую базу данных для генерации модели данных (файл .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 часов на переименование. Что мы делаем, когда клиент снова получает базу данных в поле, и мне нужно добавить новую схему?

Спасибо за понимание и помощь!

-Эрик

Ответы [ 3 ]

2 голосов
/ 27 декабря 2011

Вы можете создать частичный класс для вашей сущности и добавить все необходимые свойства:

 public partial class Appointment
 {
    public Employee Supervisor
    {
       get
       {
          return this.Employee1;
       }
    }
}
0 голосов
/ 01 сентября 2010

Возвращаясь к этому, реальная проблема была на шаг раньше в цепочке инструментов. Мы просто решили проблему, отредактировав имена в файле .edmx и очень внимательно относясь к объединению изменений при изменении базы данных. Не очень хорошее решение, но вы можете тратить столько времени только на вещи.

0 голосов
/ 03 августа 2010

В контексте ASP.NET MVC вы можете использовать DisplayNameAttribute для добавления метаданных в вашу модель.Это сообщение в блоге может помочь вам начать: http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-2-modelmetadata.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...