所以我必须从另一个数据库导入一个表。该表是使用它自己的密钥自引用的,但我不能信任密钥,特别是因为我导入的表将用于多个数据集。
我使用实体框架和代码第一个流畅的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;被假定为任何和所有表的主键。
答案 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);