【发布时间】:2018-07-29 19:53:52
【问题描述】:
我无法为自引用实体进行 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.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 应该是什么样子的任何想法?
感谢任何答案。
【问题讨论】:
-
你是否删除了 startup.cs 中的循环引用?
-
我已经有了。
-
它看起来你的同一个类也充当主键表和外键表
-
是的,但是有没有办法在没有关键关系的情况下实现这种解决方案?
-
你想要
Has/With关系在同一模型中同时充当pk和fk吗?
标签: c# .net entity-framework-core crud