Проблема каскадного удаления в EF 4.2 (сначала код) - PullRequest
0 голосов
/ 09 января 2012

У меня есть сущность под названием Пользователь.Пользователь должен использоваться в многоязычной среде. Таким образом, пользователь выглядит как

    class User{
 virtual ICollection<TextEntry> Name {get; set;}
 virtual ICollection<TextEntry> Info {get; set;}
...
}

class TextEntry
{
int id {get; set;}
string Text {get; set;}
string Culture {get;set;}
}

Также у меня есть правило для пользователя

    modelBuilder.Entity<User>()
        .HasMany(q => q.Name)
        .WithOptional()
        .WillCascadeOnDelete();

    modelBuilder.Entity<User>()
        .HasMany(q => q.Info)
        .WithOptional()
        .WillCascadeOnDelete();

С этими правилами EF не может создать модель.Ключевое ограничение 'User_Info' для таблицы 'TextEntry' может вызвать циклы или несколько каскадных путей. Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION или измените другие ограничения FOREIGN KEY. \ R \ nНе удалось создать ограничение. См. Предыдущие ошибки. "

Без этих правил я получаю исключение при попытке удалить пользователя из-за ограничений ссылок.

Как можно решить эту проблему без создания дополнительной сущности для данных User.Info?

1 Ответ

1 голос
/ 09 января 2012

Эта ошибка из SQL Server, а не из Entity Framework.Entity Framework создает одну таблицу для обоих вхождений TextEntry.

Вероятно, самое простое решение - извлечь из TextEntry два других класса, сделать TextEntry абстрактным и сопоставить эти два с различными таблицами ( TPC ),

...