实体框架删除所有行而不是

时间:2018-04-23 14:57:04

标签: c# mysql entity-framework dbcontext

我遇到了一个小问题。我想根据ID删除一行。但我继续删除所有行。

这是我的数据层中的代码。您可以将“eigenaar”一词读作“所有者”。

public void removeEigenaar(int eigenaarID)
    {
        transaction = connection.BeginTransaction();
        try
        {
            using (context = new MyDbContext(connection, false))
            {
                context.Database.Log = (string message) => { Console.WriteLine(message); };
                context.Database.UseTransaction(transaction);
                //----------------------------

                Eigenaar e =
                    (from s in context.Eigenaars
                     where s.ID == eigenaarID
                     select s).First();
                context.Eigenaars.Remove(e);

                //----------------------------
                context.SaveChanges();
            }
            transaction.Commit();
        }
        catch
        {
            transaction.Rollback();
            throw;
        }
    }

如果我调试代码,我可以看到我的“e”充满了一个所有者。这就是我觉得很奇怪的事情。

编辑 sql

我的删除查询有效,它只删除了很多方法。

3 个答案:

答案 0 :(得分:0)

尝试添加:

context.Entry(e).State = EntityState.Modified;

context.SaveChanges();

答案 1 :(得分:0)

发现问题。

在我的mydbcontext.cs中,我添加了:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<Eigenaar>().MapToStoredProcedures();
        modelBuilder.Entity<Eigendom>().MapToStoredProcedures();
        modelBuilder.Entity<Eigenschap>().MapToStoredProcedures();
        modelBuilder.Entity<Overeenkomst>().MapToStoredProcedures();
        modelBuilder.Entity<Panden_has_eigenschappen>().MapToStoredProcedures();
    }

删除此代码修复了它。

答案 2 :(得分:0)

您的代码的一些修改:

IEnumerable<Eigenaar> e= (from s in context.Eigenaars
                 where s.ID == eigenaarID
                 select s).ToList();    
context.Eigenaars.DeleteAllOnSubmit(e);
context.SubmitChanges();

OR

您可以使用DataContext.ExecuteCommand方法执行正常的SQL truncate或delete命令:

context.ExecuteCommand("DELETE FROM Entity");

或者

context.ExecuteCommand("TRUNCATE TABLE Entity");