簡體   English   中英

EF外鍵設置

[英]EF Foreign Key setup

我有一個關於在實體框架6中設置外鍵的問題。我們的項目存儲了來自其他一些服務的數據(以便更快地訪問數據),並根據存儲的數據向用戶提供圖表和統計信息。 為了存儲數據,我們設置了一個cronjob,它每天大約在凌晨3點運行。

這是2個示例數據庫模型:

public class Project {
    public string Id { get; set; }
    public string Title { get; set; }
}

public class Issue {
    public string Id { get; set; }
    public string Title { get; set; }
    [ForeignKey("Project")]
    public string ProjectId { get; set; }
    [ForeignKey("ProjectId")]
    public Project Project { get; set; }
}

現在的問題是,某些問題我們沒有保存它依賴的項目,但是我們必須保存ProjectId(因為稍后可能該項目存在於我們的數據庫中)。 因此,當我嘗試保存此問題時,它告訴我由於項目不存在,我無法保存它們。

我有什么辦法可以告訴實體框架項目是否存在無關緊要? 目前,我剛剛刪除了ForeignKey,但是當我嘗試獲取與他們的項目有關的問題的完整列表時,這使它非常慢。

或者,如果沒有外鍵,是否還有其他方法可以讀出項目中的所有問題? 目前,我正在使用一個foreach循環來拋出每個問題,然后我搜索該項目,但問題超過10.000個,則進展非常緩慢。

您定義的導航屬性需要Project表中的數據才能保存Issue 這不是實體框架,這是SQL Server外鍵約束問題。 實體框架正在進行初步驗證,以免浪費最終將失敗的連接。 雖然您可以關閉強制外鍵約束,但是沒有一種好的方法可以在Entity Framework中關閉此驗證

請記住,擁有外鍵並不意味着它將有助於查詢的性能。 這只是強制執行參照完整性的一種方法。 我懷疑您的真正問題是編寫查詢的方式。 如果看不到圍繞“慢”的查詢和指標,就很難為您指明正確的方向。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM