簡體   English   中英

通過除鍵以外的其他屬性的EF導航屬性

[英]EF Navigational Property through Different Properties Other Than Key

我正在使用類映射舊版應用程序,並對它使用EntityFramework

我在此舊數據庫中發現的一個缺陷是,多個表通過2個不同的字段引用了一個特定的表。

我不確定這是否可行,為什么我似乎找不到任何相關信息,所以我在這里。

這是一個視覺樣本:

public class Term {
    [Key]
    public string Id { get; set; } // sample value: "12-34-56/78"
    public string CleanId { get; set; } // sample value: "12345678" (basically the Id without special characters)
    public DateTime Date { get; set; }
}

public class App {
    public int Id { get; set; }
    public string CleanTermId { get; set; } // foreign key is in Term class using the `CleanId` field
}

public class Question {
    public int Id { get; set; }
    public string TermId { get; set; } // foreign key is in Term class using the `Id` field
}

如何使用Fluent API DataAnnotations (首選)將AppQuestion的導航屬性正確地添加到Term類? 我不需要從TermAppQuestion的導航屬性,但是如果您的答案包括它也可以。

讓我知道是否不清楚。

在EF Core之前的EF版本中,除主鍵之外的其他字段上的連接都是不支持的,但是您提到它是一個遺留應用程序,我懷疑您是否需要對其進行全面改造才能使用EF Core。

有一個用戶語音請求要添加功能,這是因為他們沒有計划將此功能添加到EF6中-因此Core是真正做到這一點的唯一方法。

就您的類而言,您可以將“問題和術語”作為其基礎的PK-FK進行鏈接,但是“應用程序到術語”都是基於非PK字段,即使在數據庫上具有唯一性約束,這也不支持。 EF優先於Core

嗨,這是正確的代碼:

    public class Term
{
    [Key]
    public string Id { get; set; }
    public string CleanId { get; set; }
    public DateTime Date { get; set; }
}

public class App
{
    public int Id { get; set; }

    [ForeignKey("CleanTermId")]
    public Term MyTerm { get; set; }
    public string CleanTermId { get; set; } 

}

public class Question
{
    public int Id { get; set; }

    [ForeignKey("TermId")]
    public Term MyTerm { get; set; }
    public string TermId { get; set; }
}

暫無
暫無

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

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