从自连接类型中删除

时间:2013-09-18 12:00:27

标签: c# entity-framework fluent

每当我想删除对象的层次结构时,意味着包含另一个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();
                }
            }

我真的很感激这方面的建议。

1 个答案:

答案 0 :(得分:0)

长话短说,即使我可以阅读PostGres,SQL Server也无法进行递归删除。无论如何,我必须在表上创建一个手动进行递归删除的触发器。