【问题标题】:Multiply relationships ef core将关系与核心相乘
【发布时间】:2020-02-26 07:38:35
【问题描述】:

我正在使用实体核心 3。我有 2 个类 UserTicketUser 可能有很多 Ticket 给我,也有很多 Ticket 来自我。 Ticket 应该有 User-sender 和 User-receiver。我这样做了:

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”忽略此属性。

你有什么想法吗?:)

【问题讨论】:

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


    【解决方案1】:

    您可以使用其中一种

    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); 
    }
    

    【讨论】:

    • 我试过了。我正在使用 Update-Database 并出现错误:在表 'Tickets' 上引入 FOREIGN KEY 约束 'FK_Tickets_Users_UserToId' 可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。
    • 但我不想使用 FluentApi。我使用 [InverseProperty],对于外键,我使用可为空的 int,它正在工作)谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多