gpt4 book ai didi

c# - Entity Framework 4.1、Generic Repository 和 ObservableCollection

转载 作者:太空宇宙 更新时间:2023-11-03 14:06:25 25 4
gpt4 key购买 nike

我正在使用 EF 4.1 实现存储库模式,http://huyrua.wordpress.com/2011/04/13/entity-framework-4-poco-repository-and-specification-pattern-upgraded-to-ef-4-1

我的问题是我在遗留 Winform 应用程序中工作,为了将返回的集合数据绑定(bind)到网格控件并检测新项目,我需要一个 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.");

但是使用此代码,存储库不会持久化添加的项目。

有人知道如何避免这种情况并使用 EF 4.1 从通用存储库返回 BindigList 或 ObservableCollection 吗?

已编辑:

如果我将返回的 IList 转换为 ObservableCollection,你的意思是像我写的这个测试代码可以吗?:

[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;
}
}

或者是否有通用的方法?

最佳答案

为什么不能从存储库中获取 IList,然后从该列表构建一个可观察的集合并直接使用它?

当您将元素添加到从存储库获取的列表/集合中时,您不应期望将这些元素添加到 EF 上下文中。您可以显式调用存储库以保存/删除您想要的元素,您的存储库中将有添加和删除方法。

如果您想在您的 UnitOfWork 中“自动”执行此操作,那么 UnitOfWork 应该订阅集合的事件以便知道集合何时更改,但这看起来有点奇怪。

关于c# - Entity Framework 4.1、Generic Repository 和 ObservableCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9190134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com