0

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

我正在使用实体框架和代码优先流利的 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”被假定为任何和所有表的主键。

4

1 回答 1

0

唔..

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

modelBuilder.Entity<Person>()
    .HasKey(p=> p.personId)
    .HasOptional(p => p.parent)
    .WithMany(p => p.children)
    .HasForeignKey(p => p.parentid)
    .WillCascadeOnDelete(false);
于 2014-12-11T00:36:22.180 回答