2013-08-06 1 views
2

У меня есть таблица устаревших данных. Мне нужно подключить мое приложение. Я использую первую кодовую модель POCO. У меня есть следующие классы:Код первых отношений с сущностью, свободно API

public class Equipment 
{ 
    [Key] 
    public string EquipmentId { get; set; } 
    public string OriginatorId { get; set; } 

    public virtual Employee Employee { get; set; } 
} 

public class Employee 
{ 
    [Key] 
    [Column("employee_id")] 
    public string EmployeeId { get; set; } 

    public string EmployeeName { get; set; } 

    [ForeignKey("OriginatorEmployeeId")] 
    public virtual Equipment Equipment { get; set; } 
} 

Мне нужно отобразить EmployeeID в классе Employee, чтобы в OriginatorEmployeeId в классе оборудования.

Также устаревшая таблица представлена ​​классом Employee. На самом деле таблица называется сотрудником (нижний регистр), а столбец EmployeeId - «employee_id». Я хочу сохранить имена моих классов и свойств в соответствии с остальной частью приложения, следовательно, Employee и EmployeeId.

Вот что я попытался с помощью текучего API:

modelBuilder.Entity<Employee>().Map(m => 
    { 
     m.MapInheritedProperties(); 
     m.ToTable("employee"); 
    }); 

    modelBuilder.Entity<Equipment>() 
       .HasOptional<Employee>(u => u.Employee) 
       .WithOptionalDependent(c => c.Equipment).Map(p => p.MapKey("OriginatorEmployeeId")); 

Я, вероятно, смешивая вещи, которые я не нужно. Ошибка, которую я получаю прямо сейчас:

Multiplicity is not valid in Role 'Equipment_Employee_Source' in relationship 'Equipment_Employee'. Because the Dependent Role properties are not the key properties, the upper bound of the multiplicity of the Dependent Role must be '*'. 

Любая помощь приветствуется.

+0

Я не знаком с инфраструктурой сущностей, но должен ли ваш внешний ключ отображать реальный идентификатор, например EquipmentId, вместо объекта Equipment? – PmanAce

+0

Спасибо PmanAce. С инфраструктурой сущности (EF) объект Equipment в классе Employee является навигационным свойством. Это способ представления отношений EF – steveareeno

+0

Каковы отношения, которые вы пытаетесь достичь? – Pluc

ответ

4

Может ли запись сотрудника быть связана с более чем одной записью оборудования? Если они могут, то ваш сотрудник POCO должен содержать свойство коллекции, представляющее отношения «один ко многим» между Employee and Equipment.

public virtual ICollection<Equipment> Equipments {get;set;} 

конфигурации Затем вы должны быть соответствующим образом скорректированы, чтобы показать эту связь:

modelBuilder.Entity<Employee>() 
      .HasMany<Equipment>(u => u.Equipments) 
      .WithRequired(c => c.Employee).HasForeignKey(p => p.OriginatorId); 

Это также выглядит как вам нужно настроить конфигурацию для ваших отображений имен столбца, а также. Поэтому я рекомендовал бы создать отдельный файл конфигурации для каждого из ваших Pocos, чтобы сделать его легче управлять конфигурациями, а затем просто добавить эти конфигурации в коллекцию modelbuilder.Configurations в вашем OnModelCreating случае вашей DbContext

public class EmployeeConfiguration : EntityTypeConfiguration<Employee> 

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
     modelbuilder.Configurations.Add(new EmployeeConfiguration()); 
} 
+0

Вот и все! Мне пришлось изменить свойство навигации в коллекцию и изменить текущую конфигурацию API по мере публикации. Благодаря! – steveareeno

Смежные вопросы