繁体   English   中英

实体框架中的自引用/父子关系

[英]Self referencing / parent-child relationship in Entity Framework

我读了许多程序员的文章,这些文章遇到了无法确定相关操作的有效顺序的问题。 在Entity Framework中使用自引用关系时,可能由于外键约束,模型要求或存储生成的值而存在依赖关系。

我正在尝试建立亲子关系:

public class Category {
    public int CategoryId { get; set; }
    public string Name { get; set; }
    public int ParentId { get; set; }
    public Category Parent { get; set; }
    public List<Category> Children { get; set; }
}

这是我使用的配置(Fluent API):

Property(c => c.ParentId).IsOptional();
HasMany(c => c.Children).WithOptional(c => c.Parent).HasForeignKey(c => c.ParentId);
//HasOptional(c => c.Parent).WithMany(c => c.Children).HasForeignKey(c => c.ParentId);

当我尝试保存这样的新类别时,HasMany()和HasOptional()配置都会导致“无法确定相关操作的有效顺序...”异常:

context.Categories.Add(new Category { Name = "test" });

我不明白为什么EF不插入带有null parentId的Category。 数据库允许ParentId外键为空。

您能告诉我该怎么做吗?

您必须在类别类中将ParentId定义为可空值,以将其用作可选关系的外键属性:

public int? ParentId { get; set; }

int属性不能采用null ,因此不能将NULL表示为数据库列中的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM