1

我正在构建一个简单的代码优先 MVC 3 博客,例如应用程序。我的模型有三个表,用户、评论和教程。评论表对用户和教程都有一个 FK。教程还为用户提供了一个外键。

当我运行程序时,我收到以下错误:

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)似乎通过在我的数据库上下文类中添加以下代码来解决这个问题:protected override void 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.ManyNavigationPropertyConfiguration”类型的第一个参数(您是否缺少 using 指令或程序集引用?)”

似乎这里有一些简单的东西我错过了。如何更好地重组我的数据库或如何解决这个循环冗余问题?

4

1 回答 1

1

使用WithRequired方法代替HasRequired

 modelBuilder.Entity<User>()
                .HasMany(u => u.Comments)
                .WithRequired(c => c.User)
                .HasForeignKey(c => c.UserId)
                .WillCascadeOnDelete(false);
 }
于 2012-04-10T04:06:57.707 回答