コード例 #1
0
ファイル: InMemoryIdTable.cs プロジェクト: Trayek/informa
        private void LoadDictionaries()
        {
            string sql = "SELECT [ID],[Prefix],[Key],[ParentID] FROM IDTable";
            string connectionString =
                ConfigurationManager.ConnectionStrings[_databaseConnectionStringName].ConnectionString;

            List <IDTableEntry> idTableEntries = new List <IDTableEntry>();

            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                connection.Open();

                using (SqlCommand command = new SqlCommand(sql, connection))
                {
                    using (SqlDataReader reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            idTableEntries.Add(
                                new IDTableEntry(
                                    reader.GetString(1),
                                    reader.GetString(2),
                                    ID.Parse(reader.GetGuid(0)),
                                    ID.Parse(reader.GetGuid(3)),
                                    ""
                                    ));
                        }
                    }
                }
            }

            _idByKey = new Dictionary <IdTableStringKey, IDTableEntry>();

            _idById = new Dictionary <IdTableIdKey, List <IDTableEntry> >();

            foreach (IDTableEntry entry in idTableEntries)
            {
                IdTableStringKey idTableStringKey = new IdTableStringKey(entry.Prefix, entry.Key);

                if (!_idByKey.ContainsKey(idTableStringKey))
                {
                    _idByKey.Add(idTableStringKey, entry);
                }

                IdTableIdKey idTableIdKey = new IdTableIdKey(entry.Prefix, entry.ID.Guid);

                if (!_idById.ContainsKey(idTableIdKey))
                {
                    _idById.Add(idTableIdKey, new List <IDTableEntry> {
                        entry
                    });
                }
                else
                {
                    _idById[idTableIdKey].Add(entry);
                }
            }
        }
コード例 #2
0
ファイル: IdTableIdKey.cs プロジェクト: Trayek/informa
        public override bool Equals(object obj)
        {
            IdTableIdKey idTableIdKey = obj as IdTableIdKey;

            if (idTableIdKey != null)
            {
                return(idTableIdKey.InternalKey == this.InternalKey);
            }

            return(false);
        }
コード例 #3
0
ファイル: InMemoryIdTable.cs プロジェクト: Trayek/informa
        public void RemoveID(string prefix, ID id)
        {
            var key = new IdTableIdKey(prefix, id.Guid);

            if (_idById.ContainsKey(key))
            {
                _idById.Remove(key);
            }

            IDTable.RemoveID(prefix, id);
        }
コード例 #4
0
        public override IDTableEntry[] GetKeys(string prefix, ID id)
        {
            var key = new IdTableIdKey(prefix, id.Guid);

            if (_idById.ContainsKey(key))
            {
                return(_idById[key].ToArray());
            }

            return(new IDTableEntry[0]);
        }
コード例 #5
0
ファイル: InMemoryIdTable.cs プロジェクト: Trayek/informa
        public IDTableEntry[] GetKeys(string prefix, ID id)
        {
            var key = new IdTableIdKey(prefix, id.Guid);

            //if (_idById.ContainsKey(key))
            //{
            //    return _idById[key].ToArray();
            //}

            _idById[key] = IDTable.GetKeys(prefix, id).ToList();

            if (_idById.ContainsKey(key))
            {
                return(_idById[key].ToArray());
            }

            return(new IDTableEntry[0]);
        }
コード例 #6
0
        public override void Add(IDTableEntry entry)
        {
            var idTableStringKey = new IdTableStringKey(entry.Prefix, entry.Key);

            if (!_idByKey.ContainsKey(idTableStringKey))
            {
                _idByKey[idTableStringKey] = entry;
            }

            var key = new IdTableIdKey(entry.Prefix, entry.ID.Guid);

            if (!_idById.ContainsKey(key))
            {
                _idById.Add(key, new List <IDTableEntry> {
                    entry
                });
            }
        }
コード例 #7
0
ファイル: InMemoryIdTable.cs プロジェクト: Trayek/informa
        internal IDTableEntry Add(string prefix, string key, ID id, ID parentId)
        {
            var idTableIdKey = new IdTableIdKey(prefix, id.Guid);

            var tableEntry = new IDTableEntry(prefix, key, id, parentId, "");

            if (!_idById.ContainsKey(idTableIdKey))
            {
                _idById.Add(idTableIdKey, new List <IDTableEntry> {
                    tableEntry
                });
            }

            var idTableStringKey = new IdTableStringKey(prefix, key);

            if (!_idByKey.ContainsKey(idTableStringKey))
            {
                _idByKey[idTableStringKey] = tableEntry;
            }

            return(IDTable.Add(prefix, key, id, parentId));
        }