C# 自引用实体CRUD EF CORE
我无法为自引用实体执行CRUD 这是我的实体:C# 自引用实体CRUD EF CORE,c#,.net,entity-framework-core,crud,C#,.net,Entity Framework Core,Crud,我无法为自引用实体执行CRUD 这是我的实体: public class Category { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } [Required] public string Name { get; set; } public virtual ICollection<Recipe> Recip
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>();
}
更新逻辑:
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
class:
public class CategoryDto
{
public int Id { get; set; }
public string Name { get; set; }
public int? ParentId { get; set; }
public CategoryDto Parent { get; set; }
}
我无法将此对象
保存到数据库,因为似乎父对象
也希望保存,需要获取该名称
字段
你知道CRUD对于自引用实体应该是什么样子吗
非常感谢您的回答。您必须将序列化程序配置为忽略项目中的循环引用 因此,您必须在
Startup.cs中的ConfigureServices
方法中添加以下代码行
像
添加这行代码后,您将能够在具有循环引用的表中插入记录。编辑问题“创建/更新引用实体”的工作原理应该是什么样子。您是否在startup.cs中删除了循环引用?我已经删除了。看起来您的类与主键表和外键的作用相同表也有,但是否有任何方法可以实现这种没有关键关系的解决方案?您是否希望在充当pk和fk的同一模型中使用Has/With
关系?
public class CategoryDto
{
public int Id { get; set; }
public string Name { get; set; }
public int? ParentId { get; set; }
public CategoryDto Parent { get; set; }
}
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddJsonOptions(options => {
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
});
}