2012-04-10 2 views
1

Я создаю простой код-первый блог MVC 3, например приложение. Моя модель имеет три таблицы, пользователь, комментарий и учебник. В таблице комментариев есть FK для пользователя и учебника. У учебника также есть внешний ключ для пользователя.MVC SQL циклические каскадные пути

Когда я запускаю программу, я получаю следующее сообщение об ошибке:

Introducing FOREIGN KEY constraint 'FK_Comments_Users_UserID' on table 'Comments' 
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. 

Похоже, что проблема вызвана чем-то называется каскадных удалений. Решение Microsoft для этого состоит в том, чтобы иметь лучший дизайн БД, http://support.microsoft.com/kb/321843. Но эта БД кажется примерно такой же простой, как вы можете получить.

Я нашел несколько других сообщений (Entity Framework Code first - FOREIGN KEY constraint problem), которые, похоже, решить эту проблему, добавив следующий код в моем дб контексте класса: защищенному переопределения недействительным OnModelCreating (DbModelBuilder MODELBUILDER) {

modelBuilder.Entity<User>() 
       .HasMany(u => u.Comments) 
       .HasRequired(c => c.User) 
       .HasForeignKey(c => c.UserId) 
       .WillCascadeOnDelete(false); 
} 

К сожалению, Visual Studio злится на синтаксис в .HasRequired. Фактическая ошибка - «Ошибка 1». System.Data.Entity.ModelConfiguration.Configuration.ManyNavigationPropertyConfiguration 'не содержит определения для «HasRequired» и никакого метода расширения «HasRequired» 'принятие первого аргумента типа' System.Data.Entity.ModelConfiguration.Configuration.ManyNavigati onPropertyConfiguration '(вы не указали директиву или ссылку на сборку?) «

Кажется, здесь есть что-то простое, что мне не хватает. Как я могу лучше реструктурировать свою базу данных или как решить эту проблему циклической избыточности?

ответ

1

Используйте WithRequired метод вместо HasRequired

modelBuilder.Entity<User>() 
       .HasMany(u => u.Comments) 
       .WithRequired(c => c.User) 
       .HasForeignKey(c => c.UserId) 
       .WillCascadeOnDelete(false); 
} 
+0

Brilliant! Прекрасно работает. – Svenxix

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