【问题标题】:Unable to determine a valid ordering for dependent operations?无法确定相关操作的有效顺序?
【发布时间】:2013-12-24 20:18:30
【问题描述】:

我有这个模型:

public class ContentType
{
    public int ContentTypeId{get;set;}
    public string Name{get;set;}
    public Lang Lang{get;set;}
    public bool IsPublished{get;set;}
    public int? ParentId { get; set; }
    public int UserId { get; set; }
    public virtual User User { get; set; }
    public virtual ContentType Parent { get; set; }
    public virtual List<ContentType> Children { get; set; }
}

它与自身具有一对多的关系。

在上下文中我有这个:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<ContentType>().HasMany(c => c.Children).WithOptional(c => c.Parent).HasForeignKey(c => c.ParentId);
    base.OnModelCreating(modelBuilder);
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();    
}

但是当我使用ParentId=0 保存记录时,我看到了这个错误:

无法确定相关操作的有效顺序。 由于外键约束,模型可能存在依赖关系 需求或存储生成的值。

请注意,由于以下错误,数据库中的关系不存在:

'ContentType' 表 - 无法创建关系“FK_ContentType_ContentType”。 ALTER TABLE 语句与 FOREIGN KEY SAME TABLE 冲突 约束“FK_ContentType_ContentType”。冲突发生在 数据库“CMS”,表“dbo.ContentType”,列“ContentTypeId”。

但我认为问题不在于这里。我不知道。

这里有什么问题?

【问题讨论】:

    标签: c# asp.net-mvc-4 relational-database entity-relationship


    【解决方案1】:

    看来这两个错误都是表ContentType的数据不正确造成的。

    'ContentType' 表 - 无法创建关系 'FK_ContentType_ContentType'。 ALTER TABLE 语句冲突 具有 FOREIGN KEY SAME TABLE 约束 “FK_ContentType_ContentType”。数据库“CMS”中发生冲突, 表“dbo.ContentType”,列“ContentTypeId”。

    这表明ParentId 字段中的值不正确。验证此字段中的值在其他记录中实际上是正确的ContentTypeId

    无法确定相关操作的有效顺序。 由于外键约束,模型可能存在依赖关系 需求或存储生成的值。

    此错误指向循环依赖。确认您的数据中没有循环。

    【讨论】:

    • 假设当内容类型没有父级时,parentId 字段为0。从您的回答中,我认为我应该将根内容类型的父级ID 设置为null。对吗?
    • @HamidReza,绝对。 0 是一个整数,因此 DB 将其视为有效 ID。此外,您的 ParentId 字段可以为空,所以我猜您在创建它时会考虑相同的设计。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    相关资源
    最近更新 更多