如何从存储库中获取新添加的实体?

发布于 2025-01-03 11:51:05 字数 369 浏览 0 评论 0原文

我正在使用一个存储库实现,它使用与其他存储库共享的ObjectContext。存储库保存实体的ObjectSet。我通过 Add() 方法将新实体添加到 ObjectSet 中。在导入数据时,我想查询那些新添加的对象以防止重复数据。

ObjectContext 实现工作单元模式。在导入过程结束时,我想调用 commit 方法,该方法调用 context.SaveChange() 来保存数据。

但是,在调用 SaveChanges() 之前,我找不到一种简单的方法来查询新添加的实体。你们如何处理此类问题?

I'm using a repository implementation which is using a shared ObjectContext with other repositories. The repository holds an ObjectSet of the entities. I'm adding new entities via Add() method to the ObjectSet. While importing data I would like to query those fresh added objects to prevent duplicate data.

The ObjectContext implements a unit of work pattern. At the end of the import process I would like to call the commit method which calls context.SaveChange() to persist the data.

However, I couldn't find an easy way to query the freshly added entities before I called SaveChanges(). How do you guys handle such problems?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

余罪 2025-01-10 11:51:05

查询ObjectStateManager

var foo = context.ObjectStateManager
  .GetObjectStateEntries(EntityState.Added)
  .Select(s => s.Entity).OfType<Foo>().SingleOrDefault(f => f.Id == bar);

Query the ObjectStateManager.

var foo = context.ObjectStateManager
  .GetObjectStateEntries(EntityState.Added)
  .Select(s => s.Entity).OfType<Foo>().SingleOrDefault(f => f.Id == bar);
阪姬 2025-01-10 11:51:05

我在 repository.cs 中使用 ObservableCollection 来获取数据,然后将其保存到数据库,如下所示,

 public ObservableCollection<T> Local {
    get { return UnitOfWork.GetContext().Set<T>().Local; }
 }

如果您愿意,您也可以使用 ICollection,因为它是 observablecollection 的基类。

现在,您可以查询存储库,如下所示...

 Repository.Local.Where(x=>x.TrackingNumber == order.TrackingNumber).SingleOrDefault();

但是,请记住,在保存到数据库之前,您无法使用 Id 获取数据,因此请使用其他一些唯一字段来获取数据。有关更多信息,请单击下面的链接,其中我提出了类似的问题

为什么我无法从存储库获取最近添加的对象(尚未保存在数据库中)

I used ObservableCollection inside repository.cs to get the data before saving it to database as below

 public ObservableCollection<T> Local {
    get { return UnitOfWork.GetContext().Set<T>().Local; }
 }

if you want you can also use ICollection because it is a base class for observablecollection.

Now, you can query the repository as shown below...

 Repository.Local.Where(x=>x.TrackingNumber == order.TrackingNumber).SingleOrDefault();

But, remember you cannot get data using Id's before saving to database so use some other unique field to get data. For further info click on the below link where similar kind of question was asked by me

Why I am not able to get recently added objects (yet to be saved in database) from repository

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文