每当我想删除对象的层次结构时,意味着包含另一个Menu
对象的Menu
对象。但是如果删除单个对象(内部没有任何对象),它可以正常工作。我收到以下错误:
保存不公开外键的实体时发生错误 他们关系的属性。 EntityEntries属性将 返回null,因为无法将单个实体标识为源 例外。可以在保存时处理异常 通过在实体类型中公开外键属性更容易。看到 InnerException以获取详细信息。
这就是我的类型:
public class Menu
{
public string Reference { get; set; }
[JsonProperty("text")]
[MaxLength(30), MinLength(2)]
public string DisplayText { get; set; }
[MaxLength(150)]
public string HyperLink { get; set; }
private List<Menu> menus;
[JsonProperty("items")]
public virtual List<Menu> Menus
{
get
{
if (menus == null || menus.Count == 0)
{
return null;
}
return menus;
}
set { menus = value; }
}
}
配置:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Menu>().HasKey(k => k.Reference);
}
以下是我要删除的方法:
List<Menu> menu = JsonConvert.DeserializeObject<List<TMenu>>(Menu);
using (DataContext context = new DataContext())
{
if (context.Menus.Count() != 0)
{
foreach (var item in menu)
{
Menu deleteMenu = context.Menus.Where(f => f.Reference == item.Reference).FirstOrDefault();
context.Menus.Remove(deleteMenu);
}
context.SaveChanges();
}
}
我真的很感激这方面的建议。
答案 0 :(得分:0)
长话短说,即使我可以阅读PostGres,SQL Server也无法进行递归删除。无论如何,我必须在表上创建一个手动进行递归删除的触发器。