Я использую Entity Framework 5 с Visual Studio с инструментами Powerity Entity Framework Beta 2 для обратной инженерии баз данных умеренного размера (~ 100 таблиц).
К сожалению, свойства навигации не имеют значимых имен. Например, если есть две таблицы:
CREATE TABLE Contacts (
    ContactID INT IDENTITY (1, 1) NOT NULL,
    ...
    CONSTRAINT PK_Contacts PRIMARY KEY CLUSTERED (ContactID ASC)
}
CREATE TABLE Projects (
    ProjectID INT IDENTITY (1, 1) NOT NULL,
    TechnicalContactID INT NOT NULL,
    SalesContactID INT NOT NULL,
    ...
    CONSTRAINT PK_Projects PRIMARY KEY CLUSTERED (ProjectID ASC),
    CONSTRAINT FK_Projects_TechnicalContact FOREIGN KEY (TechnicalContactID)
        REFERENCES Contacts (ContactID),
    CONSTRAINT FK_Projects_SalesContact FOREIGN KEY (SalesContactID)
        REFERENCES Contacts (ContactID),
    ...
}
Это приведет к созданию таких классов:
public class Contact
{
     public Contact()
     {
          this.Projects = new List<Project>();
          this.Projects1 = new List<Project>();
     }
     public int ContactID { get; set; }
     // ...
     public virtual ICollection<Project> Projects { get; set; }
     public virtual ICollection<Project> Projects1 { get; set; }
}
public class Project
{
     public Project()
     {
     }
     public int ProjectID { get; set; }
     public int TechnicalContactID { get; set; }
     public int SalesContactID { get; set; }
     // ...
     public virtual Contact Contact { get; set; }
     public virtual Contact Contact1 { get; set; }
}
Я вижу несколько вариантов, которые были бы лучше, чем это:
-  Используйте  имя внешнего ключа: например, все после последнего подчеркивания (
FK_Projects_TechnicalContact→TechnicalContact). Хотя это, вероятно, было бы решением с наибольшим контролем, это может быть сложнее интегрировать с существующими шаблонами. -  Используйте имя свойства , соответствующее столбцу внешнего ключа: Сбросьте суффикс 
ID(TechnicalContactID→TechnicalContact) -  Используйте  конкатенацию имени свойства и существующего решения: Пример 
TechnicalContactIDProjects(коллекция) иTechnicalContactIDContact 
К счастью, можно изменить шаблоны, включив их в проект.
Модификации должны быть сделаны для Entity.tt и Mapping.tt. Мне становится трудно из-за отсутствия возможностей intellisense и debug для внесения этих изменений.
Совпадение имен свойств (третий в приведенном выше списке), вероятно, является самым простым решением для реализации.
  Как изменить создание навигационных свойств в Entity.tt и Mapping.tt для достижения следующего результата:
public class Contact
{
     public Contact()
     {
          this.TechnicalContactIDProjects = new List<Project>();
          this.SalesContactIDProjects = new List<Project>();
     }
     public int ContactID { get; set; }
     // ...
     public virtual ICollection<Project> TechnicalContactIDProjects { get; set; }
     public virtual ICollection<Project> SalesContactIDProjects { get; set; }
}
public class Project
{
     public Project()
     {
     }
     public int ProjectID { get; set; }
     public int TechnicalContactID { get; set; }
     public int SalesContactID { get; set; }
     // ...
     public virtual Contact TechnicalContactIDContact { get; set; }
     public virtual Contact SalesContactIDContact { get; set; }
}

