获取映射的删除过程以使用更改的实体数据

时间:2013-07-19 08:43:41

标签: entity-framework entity-framework-5

我试图在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的旧值传递给删除过程。

我不想在删除实体之前对数据库进行更新调用。

1 个答案:

答案 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值发送到映射的删除过程。我还可以为相关实体设置新值,这些实体也有映射过程,并且设置了级联删除。