什么时候应该用entity framework调用DbContext.dispose()? 这个想象的方法不好吗? public static string GetName(string userId) { var context = new DomainDbContext(); var userName = context.UserNameItems.FirstOrDefault(x => x.UserId == userId); context.Dispose(); return userName; } 这是否更好? public static string GetName(string userId) { string userName; using(var context = new DomainDbContext()) { userName = context.UserNameItems.FirstOrDefault(x => x.UserId == userId); context.Dispose(); } return userName; } 这是更好的,也就是说,如果使用using()时不应该调用context.Dispose()? public […]
当通过Entity Framework 4.1添加logging时,是否有直接的方式来检索数据库自动生成的主键? 例如: dbcontext.Entity_Tables.Add(new Entity_Table { item1 = val1, item2 = val2 }); dbcontext.SaveChanges(); newPK = ???; SQL等价物将是: newPK = executeOnDB("INSERT INTO Entity_Table (item1, item2) VALUES (val1, val2);SELECT @@Indentity";); 顺便说一下,我正在使用MySQL,但SQL将是一样的MSSQL
我正在使用EntityFramework.Extended库来执行批量更新。 唯一的问题是EF没有跟踪由库执行的批量更新。 所以当我再次查询DbContext时,它不会返回更新的实体。 我发现在查询时使用AsNoTracking()方法会禁用跟踪并从数据库获取新的数据。 但是,由于EF不跟踪使用AsNoTracking()查询的实体,因此我无法对查询的数据执行任何更新。 有没有办法强制EF在跟踪更改时获取最新数据?
我用来实现我的存储库类,你可以看到下面 public Class MyRepository { private MyDbContext _context; public MyRepository(MyDbContext context) { _context = context; } public Entity GetEntity(Guid id) { return _context.Entities.Find(id); } } 不过,我最近读了这篇文章,说这是一个不好的做法,有数据上下文作为您的存储库中的私有成员: http : //devproconnections.com/development/solving-net-scalability-problem 现在,理论上这篇文章是正确的:因为DbContext实现了IDisposable,所以最正确的实现是以下内容。 public Class MyRepository { public Entity GetEntity(Guid id) { using (MyDbContext context = new MyDBContext()) { return context.Entities.Find(id); } } } 然而,根据这个其他文章configurationDbContext将不是必需的: http ://blog.jongallant.com/2012/10/do-i-have-to-call-dispose-on-dbcontext.html 哪两条是正确的? […]
在数据库优先的场景中使用DbContext时,我发现添加和删除实体与ObjectContext相比非常慢。 如果添加2000个实体并在最后保存更改,DbContext比ObjectContext慢3到5倍(顺便说一下:我知道使用SqlBulkCopy添加大量实体会更好,但这不是重点)。 如果在每次添加之后保存更改,则DbContext仍然接近两倍。 当涉及到删除它甚至会变得更糟:当在所有实体删除的末尾保存时,DbContext比ObjectContext慢大约18倍。 我把我用来比较数据库访问技术和小型控制台应用程序的高度开发的testing应用程序进行仔细检查。 两者都显示使用DbContext添加和删除实体的错误结果。 以下是控制台应用程序的结果: Inserting 2000 entities via DbContext saving changes at the end: 2164ms Inserting 2000 entities via ObjectContext saving changes at the end: 457ms Inserting 2000 entities via DbContext saving changes after each object addition: 8420ms Inserting 2000 entities via ObjectContext saving changes after each object adding: 4857ms Inserting 2000 […]
我有一个桌面客户端应用程序使用模态窗口来设置分层对象的属性。 由于这是一个客户端应用程序,并且对DbContext的访问不是线程化的,因此我在主窗体上使用长时间运行的上下文,将其传递给模态子项。 这些模式窗口使用PropertyGrid显示实体属性,也有取消button。 如果修改了任何数据并按下了取消button,则更改将反映在父窗体中(我无法处理DbContext object )。 如果没有调用DbContext.SaveChanges()方法,是否有办法放弃所做的任何更改? 更新:entity framework版本4.4。
我正在寻找一种方法来为DbContext设置CommandTimeout。 search后,我find了通过将DbContext投射到ObjectContext并为ObjectContext的CommandTimeout属性设置值的方式。 var objectContext = (this.DbContext as IObjectContextAdapter).ObjectContext; 但是我必须使用DbContext。
我想知道什么是用DBContext实现事务的最好方法。 尤其是, 如果我更改多个实体, DbContext.SaveChanges实现事务内部吗? 如果我想多次调用DbContext.SaveChanges (同一个contxet /不同的contxets),如何实现事务?
根据这个线程,我们可以通过EFlogging生成的SQL ,但是DbContext.SaveChanges()呢? 有没有简单的方法来做这个工作,没有任何额外的框架?
我正在进入entity framework,但我不确定是否缺less代码优先方法中的关键点。 我正在使用基于https://genericunitofworkandrepositories.codeplex.com/代码的通用存储库模式,并创build了我的实体。 但是,当我尝试访问或修改实体时遇到以下情况: System.InvalidOperationException:实体typesEstate不是当前上下文的模型的一部分。 它发生在我试图从我的存储库访问它时: public virtual void Insert(TEntity entity) { ((IObjectState)entity).ObjectState = ObjectState.Added; _dbSet.Attach(entity); // <– The error occurs here _context.SyncObjectState(entity); } 数据库(./SQLEXPRESS)创build得很好,但实体(表)只是在启动时没有创build。 我想知道如果我需要明确设置实体的映射? 英孚不能通过它自己? 我的实体是: public class Estate : EntityBase { public int EstateId { get; set; } public string Name { get; set; } } 我的背景是这样的: public partial class DimensionWebDbContext : […]