[英]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
(首选)将App
和Question
的导航属性正确地添加到Term
类? 我不需要从Term
到App
或Question
的导航属性,但是如果您的答案包括它也可以。
让我知道是否不清楚。
在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.