0

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.

私はエンティティフレームワークが初めてです。どんな助けでも大歓迎です。

4

1 に答える 1

0

構成を単一の多対多構成に置き換えてみてください。

modelBuilder.Entity<User>()
            .HasMany(a => a.Events)
            .WithMany(b=> b.Guests)
            .Map(x =>
            {
                x.MapLeftKey("UserId");
                x.MapRightKey("EventId");
                x.ToTable("EventGuests");
            });
于 2013-02-18T02:27:15.330 に答える