Cha*_*s W 6 c# entity-framework ef-code-first
我正在尝试将Entity Framework设置为使用可选的外键在delete上级联.我首先使用代码,我的模型如下所示:
public class Node
{
[Key]
public int ID { get; set; }
[ForeignKey("Parent")]
public int? ParentID { get; set; }
public virtual Node Parent { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我已经看到很多解决方案表明,"只需要输入外键",但这对我不起作用,因为父节点可能为空.
是否存在不涉及在父节点之前手动删除子节点的解决方案?
看起来 MSSQL 似乎是罪魁祸首。因为我的表是自引用的,所以不可能将删除时的级联设置为true。
相反,我最终所做的是手动标记每个子项以递归删除,然后调用 SaveChanges() 并让 EntityFramework 整理其余部分。
这是一个简单的代码示例来说明:
void Delete(bool recursive = false)
{
if(recursive)
RecursiveDelete();
if(this.Parent != null)
this.Parent.Children.Remove(this);
using(var db = new MyContext())
{
db.SaveChanges();
}
}
void RecursiveDelete()
{
foreach(var child in Children.ToArray())
{
child.RecursiveDelete();
Children.Remove(child);
}
using(var db = new MyContext())
{
db.Nodes.Attach(this);
db.Entry(this).State = EntityState.Deleted();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3075 次 |
| 最近记录: |