Entitystate设置为modified而不是Delete

时间:2013-11-20 20:16:29

标签: entity-framework-4.1

我正在删除以下列表中的项目

List<string> cities = new List<string>();
    cities.Add("New York");
    cities.Add("Mumbai");
    cities.Add("Berlin");
    cities.Add("Istanbul");

cities.Remove(2);

上下文会跟踪此删除。

 var entityChangeList = ChangeTracker.Entries().Where(p => p.State == EntityState.Added || p.State == EntityState.Deleted || p.State == EntityState.Modified);
  return entityChangeList.Count();

虽然entityChangeList.Count()为1,但修改了EntityState。根据我的理解,必须删除它。 我应该手动设置要删除的状态吗?

谢谢

2 个答案:

答案 0 :(得分:1)

您是否尝试直接从DBSet中删除条目?在这种情况下,EntityState将设置为Deleted。但是,如果您尝试使用外键删除DBSet中另一个列表中的条目,则外键将设置为null(如果您的数据库允许空值),从而导致父DBSet的状态被修改而不是已删除。

答案 1 :(得分:0)

除非您想要覆盖行为,否则不应手动设置状态。如果调用Remove方法,EF应自行设置状态。见下面的例子

var itemToRemove = Get(id, context);
var result = context.Set<T>().Remove(itemToRemove);
context.SaveChanges();