ASP Boilerplate(EF) - Fluent Api - 自我引用表,不使用主键

时间:2014-12-11 00:20:57

标签: c# entity-framework recursion boilerplate ef-fluent-api

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

我使用实体框架和代码第一个流畅的api,但有一个时间的bugger找到解决这个问题的方法。

这是我的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,因此可以对我的实体,存储库等进行一些控制,但不推荐。即&#39;标识&#39;被假定为任何和所有表的主键。

1 个答案:

答案 0 :(得分:0)

嗯..

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

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