【发布时间】:2015-11-24 15:03:10
【问题描述】:
Npgsql 有一个奇怪的问题。我尝试删除具有外键且仍在使用的表中的记录。 Postgres 的命令行给了我一个Key is still referenced 错误,这是意料之中的。
但是,如果我尝试在我的应用程序中使用 Npgsql 执行此操作,则会收到以下异常:
后端发送无法识别的响应类型:e
根据互联网上的消息,这很可能是由多线程引起的,但我在此应用程序中没有使用其他线程。我检查了所有代码都在“主线程”上运行。
然后,如果我发现该异常并尝试使用此代码再次查询我的数据库:
DataSet ds = new DataSet();
NpgsqlDataAdapter da = new NpgsqlDataAdapter(cmd);
ds.Reset();
da.Fill(ds);
我得到了这个例外:
如果底层流不可查找,则在读取缓冲区不为空时无法写入 BufferedStream。确保此 BufferedStream 下的流可以在此 BufferedStream 上寻找或避免交错读取和写入操作。
我想要的只是捕获错误,告诉用户他不能删除记录并完成。现在,它无缘无故地关闭了整个应用程序。
【问题讨论】:
-
这不是使用 Npgsql 时应该看到的异常。这意味着由于某种原因,Npgsql 在处理数据库时所看到的并不是它所期望的,即使在错误条件下也是如此。它没有正确处理它是一个错误。产生一个最小的复制并与他们一起打开一个错误。