Моя реализация C # DbContext не позволяет мне удалить элемент из одного из DbSets - PullRequest
0 голосов
/ 28 апреля 2019

Я реализовал архитектуру, основанную на интерфейсах, чтобы мой бизнес-уровень мог иметь несколько реализаций модели.

public interface IFoo
{
 int Id { get; set; }
 string Name { get; set; }
 ICollection<IBar> IBars{ get; set; } //association with another entity
}

public class Foo : IFoo
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Bar> Bars{ get; set; }

//Interface implementation
 public ICollection<IBar> IBars
        {
            get
            {
                return Bars.Cast<IBar>().ToList();
                //or return new List<ICardInquiry>(CardsInquiries);
            }

            set
            {
                if (value is ICollection<IBar>)
                    Bars= ((ICollection<IBar>)value).Cast<Bar>().ToList();
                else
                    throw new NotImplementedException();
            }
        }
}

Внутри моего контекста у меня будет это:

 public interface IMy_Context : IDisposable
    {
      IList<IFoo> IFoos { get;  }
      IList<IBar> IBars { get;  }
    }
...

 public class My_Context : DbContext, IMy_Context 
    {
        public DbSet<Bar> Bars{ get; set; }
        public DbSet<Foo> Foos{ get; set; }

      //interface implementations
public IList<IFoo> IFoos
        {
            get
            {
                return Foos.ToList().Cast<IFoo>().ToList();
            }

        }

        public IList<IUser> IBars
        {
            get
            {
                return Bars.ToList().Cast<IBar>().ToList();
            }
        }
    }

Это прекрасно работает,Но ... У меня возникает проблема, если я хочу удалить элемент из коллекции:

IFoo iFoo = ...;
IBar iBar = iFoo.IBars.First(b=> ...);
iFoo.Remove(iBar)

Это НЕ удалит элемент!Я понимаю почему.Причина в том, что мой метод получения коллекции интерфейсов выглядит следующим образом:

public ICollection<IBar> IBars
        {
            get
            {
                return Bars.Cast<IBar>().ToList();
                //or return new List<ICardInquiry>(CardsInquiries);
            }
          ...
         }

IBars возвращает новый список, поэтому элемент удаляется из возвращенного списка, а не из исходной коллекции модели (столбцы).

Как мне выйти из этой ситуации и сохранить реализацию интерфейса DAL?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...