乘以关系ef核心

时间:2020-02-26 07:38:35

标签: c# asp.net-core entity-framework-core

我正在使用实体核心3。我有2个类UserTicketUser对我可能有很多Ticket,而我有很多TicketTicket应该有User发送者和User接收者。我是这样做的:

public class User
{
    public int Id { get; set; }
    public string PasswordHash { get; set; }
    public string Email { get; 
    public ICollection<Ticket> TicketsToMe { get; set; }
    public ICollection<Ticket> TicketsFromMe { get; set; }
}

public class Ticket
{
    public int Id { get; set; }
    public string Title { get; set; }

    public int UserToId { get; set; }
    public int UserFromId { get; set; }
    public User UserTo { get; set; }
    public User UserFrom { get; set; }
}

我得到一个错误:无法确定类型为“用户”的导航属性“ Ticket.UserTo”所表示的关系。可以手动配置关系,也可以使用“ [NotMapped]”属性或“ OnModelCreating”中的“ EntityTypeBuilder.Ignore”忽略此属性。

您有什么想法吗?:)

1 个答案:

答案 0 :(得分:2)

您可以使用其中之一

1-元数据。您可以使用InverseProperty来定义关系。

如果您使用元数据,则应将UserToIdUserFromId设置为Nullable

public class User
{
    public int Id { get; set; }
    public string PasswordHash { get; set; }
    public string Email { get; set; }
    [InverseProperty("UserTo")]
    public ICollection<Ticket> TicketsToMe { get; set; }
    [InverseProperty("UserFrom")]
    public ICollection<Ticket> TicketsFromMe { get; set; }
}

2-FluentApi

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<User>()
        .HasMany(a => a.TicketsFromMe)
        .WithOne(a => a.UserFrom)
        .HasForeignKey(a => a.UserFromId).OnDelete(DeleteBehavior.Restrict); 
    modelBuilder.Entity<User>()
        .HasMany(a => a.TicketsToMe)
        .WithOne(a => a.UserTo)
        .HasForeignKey(a => a.UserToId).OnDelete(DeleteBehavior.Restrict); 
}