Entity Framework 6 代码中的工作跟踪优先
Work tracking in Entity Framework 6 code first
我想实现一个程序并记录所有事件(插入、更新、删除)
并将它们保存在我的数据库中。
我使用 EF codefirst,ASP.NET MVC。
这是我的代码:
public interface IUnitOfWork
{
int SaveAllChanges();
IDbSet<TEntity> Set<TEntity>() where TEntity : class;
}
我的背景是:
public class cmsContext : DbContext, IUnitOfWork
{
public int SaveAllChanges()
{
#region Tracker
var changeInfo = this.ChangeTracker.Entries()
.Where(t => t.State == EntityState.Modified)
.Select(t => new
{
Original = t.OriginalValues.PropertyNames.ToDictionary(pn => pn, pn => t.OriginalValues[pn]),
Current = t.CurrentValues.PropertyNames.ToDictionary(pn => pn, pn => t.CurrentValues[pn]),
}).ToList();
#endregion
return base.SaveChanges();
}
}
但 changeInfo
始终是 0
。有什么问题?
我的服务代码和工作单元是这样的:
public AddArticleCategoryStatus Add(ArticleCategory articleCategory)
{
_articleCategories.Add(articleCategory); // IdbSet
return AddArticleCategoryStatus.AddArticleCategorySuccessfull;
}
在控制器中我的代码是:
_articleCategoryService.Add(Category);
_uow.SaveAllChanges();
我想记录所有更改并按值插入它们。
感谢您的帮助
在这一行中:
_articleCategories.Add(articleCategory);
您是在添加实体,而不是在修改它。因此,EntityState
将是 Added
,而不是 Modified
。因此,它不会通过您的 Where
过滤器:
.Where(t => t.State == EntityState.Modified)
.Where(t => t.State == EntityState.Added || t.State == EntityState.Deleted || t.State == EntityState.Modified)
请记住,您可能需要修改 .Select
,因为 Added
和 Deleted
实体将分别没有原始值和当前值。
我想实现一个程序并记录所有事件(插入、更新、删除) 并将它们保存在我的数据库中。
我使用 EF codefirst,ASP.NET MVC。
这是我的代码:
public interface IUnitOfWork
{
int SaveAllChanges();
IDbSet<TEntity> Set<TEntity>() where TEntity : class;
}
我的背景是:
public class cmsContext : DbContext, IUnitOfWork
{
public int SaveAllChanges()
{
#region Tracker
var changeInfo = this.ChangeTracker.Entries()
.Where(t => t.State == EntityState.Modified)
.Select(t => new
{
Original = t.OriginalValues.PropertyNames.ToDictionary(pn => pn, pn => t.OriginalValues[pn]),
Current = t.CurrentValues.PropertyNames.ToDictionary(pn => pn, pn => t.CurrentValues[pn]),
}).ToList();
#endregion
return base.SaveChanges();
}
}
但 changeInfo
始终是 0
。有什么问题?
我的服务代码和工作单元是这样的:
public AddArticleCategoryStatus Add(ArticleCategory articleCategory)
{
_articleCategories.Add(articleCategory); // IdbSet
return AddArticleCategoryStatus.AddArticleCategorySuccessfull;
}
在控制器中我的代码是:
_articleCategoryService.Add(Category);
_uow.SaveAllChanges();
我想记录所有更改并按值插入它们。
感谢您的帮助
在这一行中:
_articleCategories.Add(articleCategory);
您是在添加实体,而不是在修改它。因此,EntityState
将是 Added
,而不是 Modified
。因此,它不会通过您的 Where
过滤器:
.Where(t => t.State == EntityState.Modified)
.Where(t => t.State == EntityState.Added || t.State == EntityState.Deleted || t.State == EntityState.Modified)
请记住,您可能需要修改 .Select
,因为 Added
和 Deleted
实体将分别没有原始值和当前值。