2017-04-20 81 views
0

0..1-1關係我有一個問題想正確地配置在EF的關係。我首先使用EF代碼從現有數據庫生成類。第一個表保存的指令列表,第二認爲,每個指令在狀態的記錄如何創建EF6

表(簡體):

Instruction 
----------- 
InstructionID 
CurrentInstructionStateHistoryID 

InstructionStateHistory 
----------------------- 
InstructionStateHistoryID 
InstructionID 
State 

所以,你可以看到有2個關係表之間 - 基於InstructionID的一對多關係,我不感興趣,因此刪除了屬性。第二種關係基於CurrentInstructionStateHistoryID屬性,該屬性指向指令的「當前」狀態。

的類如下:

public partial class Instruction 
{ 
    [Key] 
    public int InstructionID { get; set; } 

    public int? CurrentInstructionStateHistoryID { get; set; } 

    public virtual CurrentInstructionStateHistory InstructionStateHistory { get; set; } 

} 

public partial class InstructionStateHistory 
{ 
    [Key] 
    public int InstructionStateHistoryID { get; set; } 

    public int InstructionID { get; set; } 

    public string State { get; set; } 

    public virtual Instruction tblInstruction { get; set; } 
} 

這裏的流暢API設置定義關係:

modelBuilder.Entity<InstructionStateHistory>() 
     .HasRequired(e => e.tblInstruction) 
     .WithOptional(e => e.CurrentInstructionStateHistory); 

所以,這一切編譯和運行。但是,當我得到一點這樣的代碼:

Instruction instruction = await _dal.InstructionRepository.Find(claimID); 
    InstructionStateHistory history = i.CurrentInstructionStateHistory; 

我可以看到,該指令被正確填充,讓我們說的編號爲1234。當我檢查InstructionStateHistory對象,我看是它的InstructionID是1234,而是我所看到的是,它的InstructionStateHistoryID,即是的主鍵,是1234和它涉及到完全不同的指令。 不知何故,我需要告訴EF Instruction.CurrentInstructionStateHistoryID鏈接到InstructionStateHistory.InstructionStateHistoryID。 我已經嘗試了數據註釋和流暢設置的許多組合,但一直無法找到實際工作的組合,要麼我得到上述結果或運行時錯誤。任何幫助感激地接受!

回答

0

好像EF無法處理這種情況下,這樣的解決辦法是忘記「當前」 InstructionStateHistory的概念。相反,我添加了一個日期字段的InstructionStateHistory表,然後改變了教學類具有規則集合屬性如下:

public virtual ICollection<InstructionStateHistory> InstructionStateHistories{ get; set; } 

然後,當我需要的「當前」狀態,我只是查詢保藏中心,排序約會並採取最新的一個。