2014-01-15 82 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

之後「withrequired(t => t.Terminal)」.withkey( - 在此指定鍵)..對不起,我沒有工具來測試atm,但我相信我解決了這個問題。 – 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); 

我不得不在示例中添加額外的導航屬性(在講師類中),它似乎工作正常:

// Navigation property 
public virtual OfficeAssignment OfficeAssignment { get; set; } 
相關問題