我有一个Ticket
实体:自参照许多一对多的关系
public class Ticket
{
public int Id { get; set; }
public string Title { get; set; }
public virtual ICollection<Relation> RelatedTickets { get; set; }
}
我想设置实体框架中的核心多到很多自我的关系,所以我做了两个一到多关系:
public class Relation
{
[Required, ForeignKey("TicketFrom")]
public int FromId { get; set; }
[Required, ForeignKey("TicketTo")]
public int ToId { get; set; }
public virtual Ticket TicketFrom { get; set; }
public virtual Ticket TicketTo { get; set; }
}
我试图用建立的关系流利的API:
builder.Entity<Relation>()
.HasKey(uc => new { uc.FromId, uc.ToId });
builder.Entity<Relation>()
.HasOne(c => c.TicketFrom)
.WithMany(p => p.RelatedTickets)
.HasForeignKey(pc => pc.FromId);
builder.Entity<Relation>()
.HasOne(c => c.TicketTo)
.WithMany(p => p.RelatedTickets)
.HasForeignKey(pc => pc.ToId);
但结果我有一个错误:
Cannot create a relationship between 'Ticket.RelatedTickets' and 'Relation.TicketTo', because there already is a relationship between 'Ticket.RelatedTickets' and 'Relation.TicketForm'. Navigation properties can only participate in a single relationship.
可能的解决方案是直接添加父关系TicketEntity
:
public class Ticket
{
public int Id { get; set; }
[Required, ForeignKey("ParentRelation")]
public Nullable<int> ParentRelationId { get; set; }
public virtual Ticket ParentRelation {get;set;}
public virtual ICollection<Ticket> RelatedTickets { get; set; }
...
}
用流利的API是这样的:
modelBuilder.Entity<Ticket> =>
{
entity
.HasMany(e => e.RelatedTickets)
.WithOne(e => e.ParentRelation)
.HasForeignKey(e => e.ParentRelationId);
});
但它看起来 '脏' 到存储这样的父母关系。
什么是正确的方法?
我不确定你的“关系”类是必需的,因为它只描述关系而没有其他有意义的数据。我会像这样建模:'public virtual ICollection RelatedTickets {get;组; },而英孚将执行这些关系。 –
@Mr Anderson它可能有其他数据,您的解决方案我无法控制'卧底'结构和FK名称 – Ice2burn