0

我正在尝试在 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传递给删除过程。

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

4

1 回答 1

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

于 2013-07-23T07:12:29.137 回答