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"被假定为任何和所有表的主键。
嗯。
为什么不使用 HasKey 来定义 id 列?
modelBuilder.Entity<Person>()
.HasKey(p=> p.personId)
.HasOptional(p => p.parent)
.WithMany(p => p.children)
.HasForeignKey(p => p.parentid)
.WillCascadeOnDelete(false);