【问题标题】:MVC SQL cyclical cascade pathsMVC SQL 循环级联路径
【发布时间】:2012-04-10 03:20:24
【问题描述】:

我正在构建一个简单的代码优先 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),它们似乎通过在我的 db 上下文类中添加以下代码来解决此问题: 受保护的覆盖无效 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' 的定义并且没有扩展方法可以找到接受“System.Data.Entity.ModelConfiguration.Configuration.ManyNavigationPropertyConfiguration”类型的第一个参数的“HasRequired”(您是否缺少 using 指令或程序集引用?)”

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

【问题讨论】:

    标签: c# entity-framework-4.1 ef-code-first


    【解决方案1】:

    使用WithRequired 方法代替HasRequired

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

    【讨论】:

      猜你喜欢
      • 2017-02-09
      • 1970-01-01
      • 1970-01-01
      • 2018-08-10
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-08
      相关资源
      最近更新 更多