官方文档说修改实体我检索DbEntityEntry对象并使用属性函数或我将其状态设置为修改.它使用以下示例
Department dpt = context.Departments.FirstOrDefault();
DbEntityEntry entry = context.Entry(dpt);
entry.State = EntityState.Modified;
Run Code Online (Sandbox Code Playgroud)
我不明白第二和第三声明的目的.如果我问一个像第一个语句这样的实体的框架,然后修改POCO,就像在
dpt.Name = "Blah"
Run Code Online (Sandbox Code Playgroud)
如果我再问问EF到的SaveChanges(),实体有被修改的状态(我通过快照跟踪猜测,这是不是一个代理)和变化,而不需要手动设置状态持续存在.我在这里错过了什么吗?
我在stackoverflow上搜索但找不到类似的问题,请指出我是否有一个问题.
我试图用同步和异步操作实现一个通用的可重用存储库,但是我对实体框架和工作单元的了解很少,我很难找到实现它的正确方法.
我在SaveAndCommit操作中添加了一些变体,但不知道使用事务和异步执行此操作的最佳方法是什么.
- - 编辑 - -
根据我的理解,当执行多个操作时应该使用事务,但出于理解目的,我将它用于一个操作.(如果我错了,请纠正我)
这就是我到目前为止所做的
public class Service<TEntity> : IService<TEntity>
where TEntity : Entity
{
#region Constructor and Properties
UnitOfWork _unitOfWork { get { return UnitOfWork.UnitOfWorkPerHttpRequest; } }
protected DbSet<TEntity> Entities
{
get { return _unitOfWork.Set<TEntity>(); }
}
#endregion Constructor and Properties
#region Operations
public virtual IQueryable<TEntity> QueryableEntities()
{
return Entities;
}
public virtual async Task<IList<TEntity>> WhereAsync(Expression<Func<TEntity, bool>> predicate)
{
return await Entities.Where(predicate).ToListAsync();
}
public virtual IList<TEntity> Where(Expression<Func<TEntity, bool>> predicate)
{
return Entities.Where(predicate).ToList();
}
public …Run Code Online (Sandbox Code Playgroud)