-
您正在使用EF Core编写一个博客应用程序,其中包含实体Post(贴子)和Comment(评论)。使用以下查询加载帖子。之后,如何显式加载Comment?
- 相关资源:https://www.cnblogs.com/jaxu/p/3700511.html
-
您正在构建一个包含几个子域的应用程序,每个子域都有自己的DbContext。如何编写一个集成不同子域的快速测试?
相关资源:https://www.cnblogs.com/Laimic/p/9172844.html(EntityFrameworkCore - 内存数据库)
-
如果要在ChangeTracker中将实体的状态更改为“已更改”,应执行以下哪项操作?
在使用EF框架时,我们通常都是通过调用SaveChanges方法把增加/修改/删除的数据提交到数据库,但是上下文是如何知道实体对象是增加、修改还是删除呢?答案是通过EntityState的枚举值来判断的。也就是说在操作数据库时,EF会根据EntityState这个枚举检测到实体的状态,然后执行相应的增/删/改操作。
该状态对应的值为以下五种:
Detached:对象存在,但未由对象服务跟踪。在创建实体之后、但将其添加到对象上下文之前,该实体处于此状态;
Unchanged:自对象加载到上下文中后,或自上次调用 System.Data.Objects.ObjectContext.SaveChanges() 方法后,此对象尚未经过修改;
Added:对象已添加到对象上下文,但尚未调用 System.Data.Objects.ObjectContext.SaveChanges() 方法;
Deleted:使用 System.Data.Objects.ObjectContext.DeleteObject(System.Object) 方法从对象上下文中删除了对象;
Modified:对象已更改,但尚未调用 System.Data.Objects.ObjectContext.SaveChanges() 方法。
-
Nopcommerce中 _context.SaveChanges()保存到数据库时遇到错误时引发的异常(EF Core)
- DbUpdateException:保存到数据库时遇到错误时引发的异常
- 通过dbContext.ChangeTracker.Entries()跟踪得到上下文中的实体
- 回滚实体更改并返回完整的错误消息,并将异常抛出
public virtual void Insert(IEnumerable<TEntity> entities) { if (entities == null) throw new ArgumentNullException(nameof(entities)); try { Entities.AddRange(entities); _context.SaveChanges(); } catch (DbUpdateException exception) { //ensure that the detailed error text is saved in the Log throw new Exception(GetFullErrorTextAndRollbackEntityChanges(exception), exception); } }
/// <summary> /// 回滚实体更改并返回完整的错误消息 /// </summary> /// <param name="exception">Exception</param> /// <returns>Error message</returns> protected string GetFullErrorTextAndRollbackEntityChanges(DbUpdateException exception) { //rollback entity changes if (_context is DbContext dbContext) { var entries = dbContext.ChangeTracker.Entries() .Where(e => e.State == EntityState.Added || e.State == EntityState.Modified).ToList(); entries.ForEach(entry => { try { entry.State = EntityState.Unchanged; } catch (InvalidOperationException) { // ignored } }); } try { _context.SaveChanges(); return exception.ToString(); } catch (Exception ex) { //if after the rollback of changes the context is still not saving, //return the full text of the exception that occurred when saving return ex.ToString(); } }
-
如何创建名为InitialCreate的新迁移?
通过add-migration InitialCreate命令