2014-01-15 1 views
2

У меня есть класс:Как указать основной конец 1-1 отношений в коде первого отображения

public partial class CanteenTerminal : XTimeEntity 
{ 
    public virtual Terminal Terminal { get; set; } 
    public short TerminalId { get; set; } 
} 

и его отображение класса:

public CanteenTerminalMap() 
{ 
    // Primary Key 
    HasKey(t => t.Id); 

    // Table & Column Mappings 
    ToTable("CANTEENTERM"); 
    Property(t => t.Id).HasColumnName("TERM_CODEID"); 

    // Relationships 
    HasRequired(t => t.Terminal) 
    .WithOptional(t => t.CanteenTerminal); 
} 

У меня есть класс Terminal:

public partial class Terminal : XTimeEntity 
{ 
    public Terminal() 
    { 
    ControllerInterfacePointers = new List<ControllerInterfacePointer>(); 
    TerminalParameters = new List<TerminalParameter>(); 
    } 

    public string Name { get; set; } 
    public string Version { get; set; } 
    public short Enabled { get; set; } 
    public virtual CanteenTerminal CanteenTerminal { get; set; } 
    public short CanteenTerminalId { get; set; } 
    public virtual ICollection<ControllerInterfacePointer> ControllerInterfacePointers { get; set; } 
    public virtual ICollection<TerminalParameter> TerminalParameters { get; set; } 
} 

И его отображение файла:

public TerminalMap() 
{ 
    // Primary Key 
    HasKey(t => t.Id); 

    Property(t => t.Name) 
     .IsRequired() 
     .HasMaxLength(30); 
    Property(t => t.Version) 
     .HasMaxLength(8); 

    // Table & Column Mappings 
    ToTable("TERMINAL"); 
    Property(t => t.Id).HasColumnName("TERM_CODEID"); 
    Property(t => t.Name).HasColumnName("TERM_NAME"); 
    Property(t => t.Version).HasColumnName("TERM_VERSION"); 
    Property(t => t.Enabled).HasColumnName("TERM_ENABLED"); 
    Ignore(t => t.MasterId); 
    Ignore(t => t.IsActive); 

    HasOptional(t => t.CanteenTerminal) 
    .WithRequired(t => t.Terminal); 
} 

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

Невозможно определить главный конец связь между типами «XTime.Data.CanteenTerminal» и «XTime.Data.Terminal». Основной конец этой ассоциации должен быть явно сконфигурирован с использованием либо свободно распространяемого API, либо аннотаций данных.

Как я могу определить главный конец отношений?

+0

После «с запросом (t => t.Terminal)» .withkey (- укажите здесь ключ). Извините, у меня нет инструментов для тестирования, но я считаю, что я эта проблема была решена следующим образом. – Tsasken

+0

После фразы 'WithRequired()' в свободной цепочке отсутствует опция 'WithKey'. – ProfK

+0

Какую версию EF вы используете? Эта [ссылка] (http://msdn.microsoft.com/en-us/data/jj591620.aspx#RequiredToRequired) может быть полезна, хотя я сомневаюсь, что она применима ко всем версиям EF. Если он не поддерживается, вы будете искать что-то вроде 'HasOptional (t => t.CanteenTerminal) .WithMany(). HasForeignKey (t => t.CanteenTerminalId)'. –

ответ

0

В качестве теста, я хотел бы предложить что-то сумасшедшее:

public partial class Terminal : XTimeEntity 
{ 
    public Terminal() 
    { 
    ControllerInterfacePointers = new List<ControllerInterfacePointer>(); 
    TerminalParameters = new List<TerminalParameter>(); 
    } 

    public string Name { get; set; } 
    public string Version { get; set; } 
    public short Enabled { get; set; } 
    [Required] //I think this line will trick EF into liking you. 
    public virtual CanteenTerminal CanteenTerminal { get; set; } 
    public short CanteenTerminalId { get; set; } 
    public virtual ICollection<ControllerInterfacePointer> ControllerInterfacePointers { get; set; } 
    public virtual ICollection<TerminalParameter> TerminalParameters { get; set; } 
}; 
1

Существует хороший пример такого рода проблемы здесь: http://msdn.microsoft.com/en-us/data/jj591620#RequiredToRequired

Отображение для первичных ключей здесь является:

modelBuilder.Entity<OfficeAssignment>() 
    .HasKey(t => t.InstructorID); 

modelBuilder.Entity<Instructor>() 
    .HasRequired(t => t.OfficeAssignment) 
    .WithRequiredPrincipal(t => t.Instructor); 

Мне нужно было добавить дополнительное свойство nav (в классе инструктора) в образец, оно работает нормально:

// Navigation property 
public virtual OfficeAssignment OfficeAssignment { get; set; }