我提交这个问题有两个原因:我在使用DBreeze
在 下运行的数据库引擎时遇到了困难Mono
,但我找到了一种解决方法,它可以帮助其他人解决这个确切的问题(我将解决方法作为答案发布),如果有人否则知道更好的解决方案,我将感谢您的帮助。
问题是DBreeze在 Windows 上正常工作,但在带有 Mono 的 Linux 上,在引擎初始化之后,第一次插入它会引发以下异常:
Unhandled Exception: DBreeze.Exceptions.DBreezeException: Getting table "@utt2"
from the schema failed! ---> DBreeze.Exceptions.TableNotOperableException:
DBreeze.Scheme ---> DBreeze.Exceptions.DBreezeException: Rollback of the table
"DBreeze.Scheme" failed! ---> DBreeze.Exceptions.DBreezeException: Restore
rollback file "./DB/_DBreezeSchema" failed! --->
System.EntryPointNotFoundException: FlushFileBuffers
问题出在DBreeze/Storage/FSR.cs
文件中,因为它试图调用
[System.Runtime.InteropServices.DllImport("kernel32.dll", ExactSpelling = true, SetLastError = true)]
private static extern bool FlushFileBuffers(IntPtr hFile);
但这在 Mono 中不受支持。
问题是:如何正确刷新文件缓冲区/调用与 kernel32.dll 等效的文件FlushFileBuffers()
以将缓冲区内容写入 Mono 下的磁盘?