public void Open(IKeyValueDB keyValueDB, bool dispose, DBOptions options)
{
_keyValueDB = keyValueDB ?? throw new ArgumentNullException(nameof(keyValueDB));
_dispose = dispose;
_type2Name = options.CustomType2NameRegistry ?? new Type2NameRegistry();
_polymorphicTypesRegistry = new PolymorphicTypesRegistry();
AutoRegisterTypes = options.AutoRegisterType;
ActualOptions = options;
SymmetricCipher = options.SymmetricCipher ?? new InvalidSymmetricCipher();
_tableInfoResolver = new TableInfoResolver(keyValueDB, this);
_tablesInfo = new TablesInfo(_tableInfoResolver);
_relationsInfoResolver = new RelationInfoResolver(this);
_relationsInfo = new RelationsInfo(_relationsInfoResolver);
using var tr = _keyValueDB.StartTransaction();
_lastObjId = (long)tr.GetUlong(0);
_lastDictId = tr.GetUlong(1);
if (_lastObjId == 0)
{
if (tr.FindLastKey(AllObjectsPrefix))
{
_lastObjId = (long)PackUnpack.UnpackVUInt(tr.GetKey().Slice(AllObjectsPrefixLen));
}
}
_tablesInfo.LoadTables(LoadTablesEnum(tr));
_relationsInfo.LoadRelations(LoadRelationNamesEnum(tr));
if (_lastDictId == 0)
{
if (tr.FindExactKey(LastDictIdKey))
{
_lastDictId = PackUnpack.UnpackVUInt(tr.GetValue());
}
}
}