使用通用存储库工作单元模式从父级删除子项

时间:2018-01-01 01:07:27

标签: c# entity-framework-6 repository-pattern unit-of-work

我收到此错误:

  

由于一个或多个外键属性不可为空,因此无法更改关系。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象

每当我尝试从父母中删除孩子时。我知道之前已经问过这个问题,但没有人使用我正在使用的相同模式 下面是我的模特

public class Calender
    {

        public int CalenderId { get; set; }

        public int SessionId { get; set; }
        public string Title { get; set; }

        public virtual Session Session{get;set;}

        public virtual ICollection<CalenderDetail> Details { get; set; }
    }

public class CalenderDetail
    {
        public int DetailsId { get; set; }
        public string Activity { get; set; }
        public DateTime StartDate { get; set; }

        public int CalenderId { get; set; }
        public virtual Calender Calender { get; set; }
    }

我的服务

public void RemoveCalenderDetail(CalenderDetailsDTO calender)
        {
            if (calender.DetailsId > 0)
            {
                var dbcal = _unitOfWork.CalenderRepository.GetSingle(a => a.CalenderId == calender.CalenderId);

                var chk=dbcal.Details.Remove(dbcal.Details.Where(a => a.DetailsId == calender.DetailsId).FirstOrDefault());

                _unitOfWork.Commit();
            }
        }

删除实体的通用存储库方法

public virtual void Remove(T item)
        {
            if (item != (T)null)
            {
                //attach item if not exist
                _dbSet.Attach(item);

                //set as "removed"
                _dbSet.Remove(item);
            }
        }

谢谢

0 个答案:

没有答案