实体框架多个级联路径错误

时间:2013-02-18 00:59:35

标签: c# entity-framework-5

到目前为止,我使用Entity Framework实现了我想要的东西是这样的:

// User.cs
public class User {
  public Guid ID { get; set; } // column: user_id
  public virtual ICollection<Event> Events { get; set; }
}
// Event.cs
public class Event {
  public Guid ID { get; set; } // column: event_id
  public virtual Guid UserID { get; set; } // column: event_userid
  public virtual ICollection<User> Guests { get; set; }
}
// MyAppContext.cs
...
protected override void OnModelCreating(DbModelBuilder mb) {
  mb.Entity<User>()
    .HasKey(u => u.ID)
    .HasMany(u => u.Events)
    .WithOptional()
    .HasForeignKey(e => e.UserID);

  mb.Entity<Event>()
    .HasKey(e => e.ID)
    .HasMany(e => e.Guests)
    .WithMany();
}
...

我期待数据库结构如下:

TABLE: user
user_id uniqueidentifier not null primary key

TABLE: event
event_id uniqueidentifier not null primary key
event_userid uniqueidentifier not null foreign key references user(user_id)

TABLE: event_guests
event_id uniqueidentifier not null
user_id uniqueidentifier not null

我有一种感觉,我上面使用的流畅的API不会给出预期的数据库结构,而且,我得到以下异常,我不知道如何修复:

Introducing FOREIGN KEY constraint 'FK_xxx' on table 'event_guests'
may cause cycles or multiple cascade paths. Specify ON DELETE NO
ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Could not create constraint. See previous errors.

我是实体框架的新手,非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

尝试使用单个多对多配置替换您的配置。

modelBuilder.Entity<User>()
            .HasMany(a => a.Events)
            .WithMany(b=> b.Guests)
            .Map(x =>
            {
                x.MapLeftKey("UserId");
                x.MapRightKey("EventId");
                x.ToTable("EventGuests");
            });