У меня есть приложение, которое подключается к базе данных MS Access. Прежде чем вы скажете, что я должен избавиться от Jet Engine, я мог бы сделать это в будущем, на самом деле, я хочу, чтобы мое приложение делало выбор между несколькими установленными двигателями. Поэтому пока я хочу, чтобы мое приложение было максимально независимым от движка.
Я пытаюсь реализовать новую функцию, которая позволит нескольким экземплярам моего приложения работать на одной машине , и все эти экземпляры будут подключаться к одной и той же базе данных. Но мне нужно иметь возможность контролировать, кто обращается к базе данных каждый раз. Я не могу просто позволить всем экземплярам обращаться к нему из нескольких потоков, потому что некоторые запросы должны выполняться в строке, например, вставка строки, а затем выполнение запроса @@SELECT IDENTITY
сразу, чтобы получить только что сгенерированный автоматический идентификатор.
Я не хочу, чтобы двигатель позаботился об этом, потому что все двигатели разные в этом отношении. Первым делом я подумал об использовании WCF и каналов и написал свой собственный маленький сервер баз данных, который просто оборачивался вокруг Jet Engine и базы данных. Затем используйте lock
s или Mutex
es вместе с некоторыми видами RequestExclusiveAccess
и ReleaseExclusiveAccess
, чтобы контролировать, кто может обращаться к базе данных в каждый момент.
Теперь я думаю использовать Mutex
, и ни одного сервера не должно быть достаточно, но я все еще не уверен. Есть ли какая-то другая возможность, которую я здесь упускаю? Как вы думаете, что будет наиболее эффективным способом для достижения этой цели?