2015-06-06 4 views
0

Я разрабатываю пример приложения, в котором люди могут делать ставки на спортивные мероприятия и зарабатывать очки. Она имеет следующие Entity Framework Code-первых моделей:Ограничение EF FOREIGN KEY может вызвать циклы или несколько каскадных путей

public class Person 
{ 
    [Key] 
    public int Id { get; set; } 

    [Required] 
    public string Name { get; set; } 
} 

public class Race 
{ 
    [Key] 
    public int Id { get; set; } 

    [Required] 
    public string Name { get; set; } 
} 

public class RaceBet 
{ 
    [Key] 
    public int Id { get; set; } 

    [Required] 
    public int RaceId { get; set; } 

    [Required] 
    public int PersonId { get; set; } 

    [Required] 
    public int CompetitorId { get; set; } 

    public virtual Race Race { get; set; } 
    public virtual Person Person { get; set; } 
    public virtual Person Competitor { get; set; } 
} 

Человек может сделать ставку на гонки, и он может сделать ставку на любое другое лицо (Конкурент).

модели будет производить следующее сообщение об ошибке:

Introducing FOREIGN KEY constraint 'FK_dbo.RaceBets_dbo.People_PersonId' on table 'RaceBets' 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. 

Я попытался удалить OneToManyCascadeDeleteConvention, добавив, беглые конфигурации для предотвращения каскадного удаления для RaceBet и всех других вариаций апи, но все не получается.

modelBuilder 
.Entity<RaceBet>() 
.HasRequired(x => x.Person) 
.WithMany() 
.HasForeignKey(x => x.PersonId) 
.WillCascadeOnDelete(false); 

Как я могу это устранить? Является ли концепция, лежащая в основе моих моделей, неправильной?

Спасибо!

+1

Я не могу воспроизвести исключение с этим кодом: защищенному переопределения недействительным OnModelCreating (DbModelBuilder MODELBUILDER) { modelBuilder.Conventions.Add (новый System.Data.Entity.ModelConfiguration.Conventions.OneToManyCascadeDeleteConvention()); MODELBUILDER .Entity () .HasRequired (х => x.Person) .WithMany() .HasForeignKey (х => x.PersonId) .WillCascadeOnDelete (ложь); } – Oleg

+0

Ошибка в моей части, когда я попытался скопировать вашу модель. Вы уверены, что у вас есть один и тот же проект? – Aizen

ответ

0

Благодаря Олегу за его комментарий:

I can't to reproduce exception with this code: protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Add(new System.Data.Entity.ModelConfiguration.Conventions.OneToManyCascadeDeleteConventi‌​on()); modelBuilder .Entity() .HasRequired(x => x.Person) .WithMany() .HasForeignKey(x => x.PersonId) .WillCascadeOnDelete(false); }

Это фиксированное создание модели.

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