(FYI, Foo и Bar - классы сущностей POCO Entity Framework)
Я хотел бы использовать этот интерфейс:
public interface IFoo
{
int Id { get; set; }
string Name { get; set; }
ICollection<IBar> IBars{ get; set; } //association with another entity
}
My implementation is as follows:
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();
}
}
}
Эта реализация не позволяет мне удалить элемент из коллекции:
IFoo iFoo = MyIFooFactory.CreateIFoo();
IBar iBar = iFooIBars.First();
iFoo.IBars.Remove(iBar);
Это НЕ удалит элемент!Я понимаю почему.Причина в том, что мой метод получения коллекции интерфейсов снова выглядит следующим образом:
public ICollection<IBar> IBars
{
get
{
return Bars.Cast<IBar>().ToList();
//or return new List<ICardInquiry>(CardsInquiries);
}
...
}
IBars возвращает новый список, поэтому элемент удаляется из возвращенного списка, а не из исходной коллекции (столбцы).
Как я могу выйти из этой ситуации?Я действительно не хочу, чтобы IFoo знал о Баре и манипулировал только IBar.