繁体   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