我很难为自引用实体进行CRUD。
这是我的实体:
public class Category
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
public string Name { get; set; }
public virtual ICollection<Recipe> Recipes { get; set; } = new HashSet<Recipe>();
public int? ParentId { get; set; }
public virtual Category Parent { get;set; }
public virtual ICollection<Category> Categories { get; set; } = new HashSet<Category>();
}
ModelBuilder:
modelBuilder.Entity<Category>()
.WithMany(c => c.Categories)
.HasOne(c => c.Parent)
.HasForeignKey(c => c.ParentId);
我的创建逻辑:
public void Save(Category category)
{
if(category.Parent != null && category.Parent.Id == 0)
{
category.Parent = null;
}
else
{
_db.Entry(category.Parent).State = EntityState.Unchanged;
}
_db.Category.Add(category);
_db.SaveChanges();
}
更新逻辑:
public void Update(Category category)
{
_db.Category.Update(category);
_db.SaveChanges();
}
CategoryDto
类:
public class CategoryDto
{
public int Id { get; set; }
public string Name { get; set; }
public int? ParentId { get; set; }
public CategoryDto Parent { get; set; }
}
我无法将此object
保存到数据库,因为似乎Parent
也要保存,因此需要获取Name
字段。
有什么想法对自引用实体来说CRUD应该是什么样子?
任何答案都值得赞赏。
答案 0 :(得分:1)
您必须配置序列化程序以忽略项目中的循环引用。
为此,您必须在ConfigureServices
的{{1}}方法内添加以下代码行
喜欢
Startup.cs
添加此行代码后,您将能够在具有循环引用的表中插入记录。
答案 1 :(得分:0)
已编辑的问题,如何使参照实体的创建/更新看起来一切正常。