代码之家  ›  专栏  ›  技术社区  ›  monstertjie_za

在同一个集合实体框架6上具有逆比例的多个和一个多个

  •  1
  • monstertjie_za  · 技术社区  · 7 年前

    我有以下几点:

    public class Event : IEntity
    {
        [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        [JsonProperty("id")]
        public Guid Id { get; set; }
    
        [JsonProperty("description")]
        public string Description { get; set; }
    
        [JsonProperty("date")]
        public DateTimeOffset Date { get; set; }
    
        [JsonProperty("distance")]
        public int Distance { get; set; }
    
        [JsonProperty("verticalAscend")]
        public int VerticalAscend { get; set; }
    
        [ForeignKey("User")]
        [JsonProperty("userId")]
        public Guid UserId { get; set; }
    
        //attending
        public DateTimeOffset DateCreated { get; set; }
        public DateTimeOffset DateModified { get; set; }
    
        [JsonProperty("user")]
        public virtual User User { get; set; }
        [JsonProperty("comments")]
        public virtual ICollection<Comment> Comments { get; set; }
        [JsonProperty("attending")]
        public virtual ICollection<User> AttendingList { get; set; }
    }
    

    还有:

    public class User : IEntity
    {
        [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        [JsonProperty("id")]
        public Guid Id { get; set; }
    
        [JsonProperty("profilePicUrl")]
        public string ProfilePicUrl { get; set; }
    
        [JsonProperty("name")]
        public string Name { get; set; }
    
        [JsonProperty("surname")]
        public string LastName { get; set; }
    
        [JsonProperty("email")]
        public string Email { get; set; }
    
        public DateTimeOffset DateCreated { get; set; }
        public DateTimeOffset DateModified { get; set; }
    
        public virtual ICollection<Event> AttendingEvents { get; set; }
        [InverseProperty("User")]
        public virtual ICollection<Event> Events { get; set; }
    }
    

    关系:

    事件:

    • 许多用户参加(与会者列表)

    用户:

    • 可以参加许多活动(出席事件)

    • 可以创建多个事件(事件)

    event.attentingList和user.attentingEvents之间存在许多关系。 事件.user和user.events之间存在0多个关系,foreignkey为userid。

    我正在尝试用Fluent API配置这些,并使用 InverseProperty 要配置关系的另一端,请映射回 Event.User ,但出现以下错误:

    在表“userevents”上引入外键约束“fk_dbo.userevents_dbo.events_event_id”可能会导致循环或多个级联路径。指定“不删除任何操作”或“不更新任何操作”,或修改其他外键约束。

    我不确定如何在一张桌子上解决这种关系。我做错什么了?

    1 回复  |  直到 7 年前
        1
  •  1
  •   TanvirArjel    7 年前

    DbContext 配置模型如下:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
         base.OnModelCreating(modelBuilder);
    
         modelBuilder.Entity<Event>().HasRequired(e => e.User)
                .WithMany(u => u.Events)
                .HasForeignKey(e => e.UserId)
                .WillCascadeOnDelete(false);
    
         modelBuilder.Entity<User>()
                .HasMany<Event>(s => s.AttendingEvents)
                .WithMany(c => c.AttendingList)
                .Map(cs =>
                {
                    cs.MapLeftKey("UserId");
                    cs.MapRightKey("EventId");
                    cs.ToTable("UserEvents");
                });
    }