我试图在EF(5.0,数据库优先)中获取映射删除过程,以使用实体中的更新属性作为参数。
映射过程有两个参数:
DeleteRow:
@Id : int -> (Key) Id : int32
@Modifiedby : char -> Modifiedby : string
在控制器中,我想在调用删除过程之前更改Modifiedby
值。
Subscription subscription = context.Subscription.Find(id);
subscription.Modifiedby = "Test";
context.Subscription.Remove(subscription);
context.ChangeTracker.DetectChanges();
context.SaveChanges();
但是,当调用该过程时,始终将Modifiedby
的旧值传递给删除过程。
我不想在删除实体之前对数据库进行更新调用。
答案 0 :(得分:0)
通过使用无跟踪实体结束解决此问题。从这篇博文中得到了这个想法:http://blogs.msdn.com/b/alexj/archive/2009/03/27/tip-9-deleting-an-object-without-retrieving-it.aspx
添加了AsNoTracking()
方法调用,修改后,实体将附加到上下文,然后被删除。
Subscription subscription = context.Subscription.AsNoTracking()
.Include(i => i.RelatedEntity)
.FirstOrDefault(c => c.SubscriptionId == id);
subscription.Modifiedby = "TEST-Subcription";
subscription.RelatedEntity.ToList().ForEach(f => f.Modifiedby = "TEST_Related");
context.Subscription.Attach(subscription);
context.Subscription.Remove(subscription);
context.SaveChanges();
这允许将新的Modifiedby
值发送到映射的删除过程。我还可以为相关实体设置新值,这些实体也有映射过程,并且设置了级联删除。