我遇到了一个小问题。我想根据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
我的删除查询有效,它只删除了很多方法。
答案 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");