2016-03-13 21 views
0

我們刪除了主鍵並將其轉換爲組合鍵。該屬性已從Model和Fluent Mapping中刪除。該字段已從數據庫中刪除。現在,當我們在提交火QueryOver,它觸發的更新和更新拋出​​SQL Error: Invalid Column Name: 'SubmissionID'在刪除的列上找不到流暢的nhibernate列

上一頁

public class Submission{ 
    public virtual int SubmissionID{get;set;} 
    public virtual int CandidateID{get;set;} 
    public virtual int JobID{get;set;} 
} 
public class SubmissionMap:...{ 
    public SubmissionMap(){ 
    Id(x=>x.SubmissionID 
    } 
} 

改爲

public class Submission{ 
    public virtual Candidate Candidate{get;set;} 
    public virtual Job Job{get;set;} 
} 
public class SubmissionMap:...{ 
    public SubmissionMap(){ 
    CompositeId() 
    .KeyReference(x=>x.Job) 
    .KeyReference(x=>.Candidate); 

    } 
} 

此更改後,任何更新/上提交插入被觸發一個SQL Error: Invalid SubmissionID column。我們記錄了所有的NHibernate SQL查詢,它們都沒有SubmissionID列。

作爲臨時修復,我們重新創建了SubmissionID列,並且錯誤消失。我們確實有Redis二級緩存。

回答

0

那麼,你還需要Submission實體嗎?它現在看起來像一個純粹的候選人和工作之間的關係many-to-many

然後可以在沒有中間實體的情況下映射它。 (請參閱this page上的最後一個示例。)

如果您在Submission上有其他屬性,放棄其複合關鍵字的替代關鍵碼是很奇怪的。這通常使得使用ORM更難。例如,您現在應該執行Submissionid as a component。 (請參閱this blog以瞭解更多解釋,或者閱讀整個composite-id reference。)

現在談談您的實際問題和麻煩:對不起,在您的問題中提供的事實中,我不知道如何實現這一點。數據庫中有一些老的觸發器在搞亂嗎?

+0

數據庫架構轉儲不顯示列被引用到任何地方。所以似乎沒有任何舊的觸發器或與此有關的任何數據庫相關的問題。將嘗試刪除Redis緩存並嘗試重新運行,看看是否有幫助。感謝您對代理鍵的建議和鏈接。 –