如何发送修改后的值以删除存储过程
How to send modified values to delete stored procedure
我首先使用 Entity Framework 6 数据库。我所有实体的 CUD 操作都映射到 .edmx
文件中的存储过程。我的 DELETE 不是真正的删除 - 它们实际上设置了一个从 0 到 1 的 IsDeleted
列,然后实体被 IsDeleted = 0
过滤,所以 EF 不会在 SELECT 中选择它们。
除一个问题外,一切正常。我的实体有一个 UpdateDate
/ UpdateBy
列,我想在删除时用当前用户的值和时间更新它。所以我在调用.SaveChanges()
之前设置了它们,但是发送到数据库的是原始值,而不是我设置的值。
值得注意的是,为了删除,我从数据库中提取实体(其中这些字段有一些默认值)并将其标记为删除。
如何让 EF 将修改后的值发送到 DELETE 存储过程?
编辑
你想要一些代码,所以就在这里。太琐碎了我还以为是多余的
public List<Audit> CreateAuditData(DbContext context)
{
var entries = from e in context.ChangeTracker.Entries()
where e.State != EntityState.Unchanged
select e;
foreach (var entry in entries)
{
Audit audit = new Audit();
audit.CreateBy = audit.UserName = HttpContext.Current.User.Identity.Name;
audit.CreateDate = DateTime.Now;
IModel model = entry.Entity as IModel;
switch (entry.State)
{
...
case EntityState.Deleted:
model.UpdateBy = audit.CreateBy;
model.UpdateDate = audit.CreateDate;
...
break
}
}
当我从这个方法 return 时,我立即在上下文中调用 SaveChanges()
。
Audit
是其他一些实体,我也会在每次更改时保存它。 IModel
是我所有实体实现的接口,它包含 UpdateDate
和 UpdateBy
属性。
由于 EF 仅将原始值发送到删除存储过程,因此我必须使用要发送到该过程的值修改实体的 DbEntityEntry.OriginalValues
集合。将适当的属性映射到过程参数,我能够在数据库中获取这些值。
我首先使用 Entity Framework 6 数据库。我所有实体的 CUD 操作都映射到 .edmx
文件中的存储过程。我的 DELETE 不是真正的删除 - 它们实际上设置了一个从 0 到 1 的 IsDeleted
列,然后实体被 IsDeleted = 0
过滤,所以 EF 不会在 SELECT 中选择它们。
除一个问题外,一切正常。我的实体有一个 UpdateDate
/ UpdateBy
列,我想在删除时用当前用户的值和时间更新它。所以我在调用.SaveChanges()
之前设置了它们,但是发送到数据库的是原始值,而不是我设置的值。
值得注意的是,为了删除,我从数据库中提取实体(其中这些字段有一些默认值)并将其标记为删除。
如何让 EF 将修改后的值发送到 DELETE 存储过程?
编辑 你想要一些代码,所以就在这里。太琐碎了我还以为是多余的
public List<Audit> CreateAuditData(DbContext context)
{
var entries = from e in context.ChangeTracker.Entries()
where e.State != EntityState.Unchanged
select e;
foreach (var entry in entries)
{
Audit audit = new Audit();
audit.CreateBy = audit.UserName = HttpContext.Current.User.Identity.Name;
audit.CreateDate = DateTime.Now;
IModel model = entry.Entity as IModel;
switch (entry.State)
{
...
case EntityState.Deleted:
model.UpdateBy = audit.CreateBy;
model.UpdateDate = audit.CreateDate;
...
break
}
}
当我从这个方法 return 时,我立即在上下文中调用 SaveChanges()
。
Audit
是其他一些实体,我也会在每次更改时保存它。 IModel
是我所有实体实现的接口,它包含 UpdateDate
和 UpdateBy
属性。
由于 EF 仅将原始值发送到删除存储过程,因此我必须使用要发送到该过程的值修改实体的 DbEntityEntry.OriginalValues
集合。将适当的属性映射到过程参数,我能够在数据库中获取这些值。