Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 如何从存储库中获取新添加的实体?_Entity Framework_Entity Framework 4.1_Ef Code First_Repository Pattern_Unit Of Work - Fatal编程技术网

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

Entity framework 如何从存储库中获取新添加的实体?,entity-framework,entity-framework-4.1,ef-code-first,repository-pattern,unit-of-work,Entity Framework,Entity Framework 4.1,Ef Code First,Repository Pattern,Unit Of Work,我正在使用一个存储库实现,它与其他存储库一起使用共享的ObjectContext。存储库保存实体的ObjectSet。我通过Add()方法将新实体添加到ObjectSet。导入数据时,我希望查询那些新添加的对象,以防止重复数据 ObjectContext实现工作单元模式。在导入过程结束时,我想调用commit方法,该方法调用context.SaveChange()来持久化数据 但是,在调用SaveChanges()之前,我找不到一种简单的方法来查询新添加的实体。你们是如何处理这些问题的?查询Ob

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

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


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

查询
ObjectStateManager

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

查询
ObjectStateManager

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

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

 public ObservableCollection<T> Local {
    get { return UnitOfWork.GetContext().Set<T>().Local; }
 }
但是,请记住,在保存到数据库之前,无法使用Id获取数据,所以请使用其他一些唯一字段来获取数据。欲了解更多信息,请点击下面的链接,我曾在这里问过类似的问题


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

 public ObservableCollection<T> Local {
    get { return UnitOfWork.GetContext().Set<T>().Local; }
 }
但是,请记住,在保存到数据库之前,无法使用Id获取数据,所以请使用其他一些唯一字段来获取数据。欲了解更多信息,请点击下面的链接,我曾在这里问过类似的问题


问题在于存储库中的上下文未知。上下文是通过统一注入的。代码公共类存储库:i位置,其中T:class,IEntity{受保护的只读IDbContext上下文;受保护的只读IDbSet实体;#区域构造函数///////默认构造函数/////包装对象上下文公共存储库(IDbContext上下文){this.context=context;this.entities=context.Set();}´@Flo您的抽象(存储库)已经让你失望了。找到一种方法来公开实体框架的完整API。我知道这已经晚了,但是对于任何面临相同问题的人来说,你可以在
UnitOfWork
中放置一个通用方法,并使用上下文获取具有上述实现的任何实体的最新添加项。问题是,在撤销存储库。上下文通过unity注入。代码公共类存储库:IRepository,其中T:class,Entity{受保护的只读IDbContext上下文;受保护的只读IDbSet实体;#区域构造函数////////默认构造函数//////包装对象上下文公共存储库(IDbContext context){this.context=context;this.entities=context.Set()}@Flo您的抽象(存储库)让您失望了。找到一种方法公开实体框架的完整API。我知道这已经晚了,但是对于任何面临相同问题的人,您可以在
UnitOfWork
中放置一个通用方法,并使用上下文为具有上述实现的任何实体获取最新添加的条目。