2013-02-18 3 views
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. 

Я новичок в инфраструктуре сущности, любая помощь будет высоко оценена.

ответ

0

Попробуйте заменить конфигурацию одним-большим количеством конфигураций.

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

В какой-то другой должности было предложено попробовать это: modelBuilder.Conventions.Remove (); Я сделал, и теперь все хорошо. Благодарю. – gplusplus

Смежные вопросы