Я реализую шаблон репозитория с EF 4.1, http://huyrua.wordpress.com/2011/04/13/entity-framework-4-poco-repository-and-specification-pattern-upgraded-to-ef-4-1
Моя проблема заключается в том, что я работаю в унаследованном приложении Winform и для привязки возвращенной коллекции к элементам управления сеткой и обнаружения новыхэлементы, мне нужен ObservableCollection, но все методы репозитория, которые я видел на примерах шаблонов репозиториев varios, возвращают только коллекции IList.
Теперь я делаю:
IList<AccountType> accountTypes = _repository.GetAll<AccountType>().ToList();
var a1 = new AccountType { Name = "Bank2" };
var a2 = new AccountType { Name = "Cash2" };
accountTypes.Add(a1);
accountTypes.Add(a2);
_repository.UnitOfWork.SaveChanges();
Console.Write("AccountType Saved.");
, но с этим кодом,добавленные элементы не сохраняются в хранилище.
У кого-нибудь есть идеи, как этого избежать и вернуть BindigList или ObservableCollection из общего хранилища, используя EF 4.1?
РЕДАКТИРОВАНИЕ:
Если я преобразовываю IList, возвращенный в ObservableColletion, вы имеете в виду что-то вроде этого тестового кода, который я написал, в порядке?:
[TestMethod]
public void CreateAccountList()
{
_accountTypes = new ObservableCollection<AccountType>(_repository.GetAll<AccountType>().ToList());
_accountTypes.CollectionChanged += CollectionChanged;
var a1 = new AccountType { Name = "Bank2" };
var a2 = new AccountType { Name = "Cash2" };
_accountTypes.Add(a1);
_accountTypes.Add(a2);
_accountTypes.Remove(a2);
_repository.UnitOfWork.SaveChanges();
int count = _repository.Count<AccountType>();
Assert.AreEqual(1, count);
}
void CollectionChanged(object sender, NotifyCollectionChangedEventArgs notifyCollectionChangedEventArgs)
{
switch (notifyCollectionChangedEventArgs.Action)
{
case NotifyCollectionChangedAction.Add:
foreach (var accountType in notifyCollectionChangedEventArgs.NewItems)
{
_repository.Add((AccountType)accountType);
}
break;
case NotifyCollectionChangedAction.Remove:
foreach (var accountType in notifyCollectionChangedEventArgs.OldItems)
{
_repository.Delete((AccountType)accountType);
}
break;
}
}
или существует универсальный способ сделать это