我想使用急切加载O / RM模式来加载相关实体数据Parent
。但是我无法在ParentId
上指定foregin键约束,因为它会创建一个不允许的循环。目前,我正在使用内部联接显式加载父数据。
这是我正在使用的域模型。
[Table("Category")]
public class CategoryDM
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int CategoryId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
[Display(Name="Parent")]
public int ParentId { get; set; }
[NotMapped]
public CategoryDM Parent { get; set; }
}
有没有办法像这样加载相关实体?或任何其他推荐的方法来实现这一目标。
var result = _context.Category.Include(e => e.Parent);
答案 0 :(得分:1)
这应该工作正常,这是一个示例工作模型。
型号
public class Category : ISelfRelated<Category>
{
public int Id { get; set; }
public string Name { get; set; }
public string ThumbnailUrl { get; set; }
public int? ParentId { get; set; }
public Category Parent { get; set; }
public IEnumerable<Category> Children { get; set; }
}
模型配置
category.HasOne(c => c.Parent)
.WithMany(c => c.Children)
.HasForeignKey(c => c.ParentId)
.HasPrincipalKey(c => c.Id)
.OnDelete(DeleteBehavior.Restrict)
.IsRequired(false);