ASP 样板 (EF) - Fluent API - 自引用表,不使用主键

本文关键字:API 样板 EF ASP Fluent 自引用 | 更新日期: 2023-09-27 18:33:51

所以我必须从另一个数据库导入一个表。该表使用自己的键进行自我引用,但我不能信任该键,特别是因为我要导入的表将用于多个数据集。

我正在使用实体框架和代码优先流畅的api,但是在寻找解决此问题的方法时

遇到了麻烦。

这是我的POCO类(简化为仅所需的数据点):

public class Person
{
    public virtual int Id { get; set; }
    public virtual int personid { get; set; }
    public virtual int? parentid { get; set; }
    public virtual Person parent { get; set; }
    public virtual ICollection<Person> children { get; set; }
}

这将是一个简单的自我引用表,如果我可以使用 Id,但我必须使用 personid。我已经在这里设置了我需要的流畅 api 的想法,但 EF 一直在看 Id。

modelBuilder.Entity<Person>()
   .HasOptional(p => p.parent)
   .WithMany(p => p.children)
   .HasForeignKey(p => p.parentid)
   .WillCascadeOnDelete(false);

使用personid作为唯一约束填充集合的任何解决方法(尚未在EF6.1.2中实现)?

我也在使用 Asp.NetBoilerplate,因此可以对我的实体、存储库等进行一些控制,但不建议这样做。 即"Id"被假定为任何和所有表的主键。

ASP 样板 (EF) - Fluent API - 自引用表,不使用主键

嗯。

为什么不使用 HasKey 来定义 id 列?

modelBuilder.Entity<Person>()
    .HasKey(p=> p.personId)
    .HasOptional(p => p.parent)
    .WithMany(p => p.children)
    .HasForeignKey(p => p.parentid)
    .WillCascadeOnDelete(false);