我正在使用类映射旧版应用程序,并对其使用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
}
如何使用App
(首选)到Question
,将Term
和DataAnnotations
的导航属性正确地添加到Fluent API
类中?我不需要从Term
到App
或Question
的导航属性,但是如果您的答案包括它也可以。
让我知道是否不清楚。
答案 0 :(得分:1)
在主键以外的其他字段上加入的功能在EF Core之前的EF版本中是不受支持的,但是,由于提到它是旧版应用程序,我怀疑您是否希望对其进行全面修改以使其能够使用EF Core。 / p>
有一个要添加此功能的用户语音请求Here,响应是他们没有计划将此功能添加到EF6中-因此,Core是真正做到这一点的唯一方法。
就您的班级而言,您可以将“问题”和“术语”作为其基础的PK-FK进行链接,但是“应用程序到术语”基于非PK字段,即使在数据库上具有唯一性约束也是如此。 Core之前的EF不支持
答案 1 :(得分:0)
嗨,这是正确的代码:
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; }
}