2012-04-10 83 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. 

这似乎是问题是由一些所谓的级联删除造成的。微软的解决方案是拥有更好的数据库设计,http://support.microsoft.com/kb/321843。但是这个数据库似乎就像你可以得到的一样简单。

我已经发现了一些其他职位(Entity Framework Code first - FOREIGN KEY constraint problem)这似乎在我的数据库上下文类添加以下代码来解决这个问题: 保护覆盖无效OnModelCreating(DbModelBuilder模型构建器) {

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

辉煌!很棒。 – Svenxix 2012-04-10 04:21:20