public IGraphEdge GetEdge(int eid)
            {
                EdgePage page = LoadEdgePage(NetworkObjectSerializer.Page(eid));

                if (page == null)
                {
                    return(null);
                }

                return(page.GetEdge(eid));
            }
            private EdgePage LoadEdgePage(int page)
            {
                lock (_thisLock)
                {
                    if (_edgePages.ContainsKey(page))
                    {
                        return(_edgePages[page]);
                    }

                    if (_dbfactory != null)
                    {
                        try
                        {
                            using (DbConnection connection = _dbfactory.CreateConnection())
                            {
                                connection.ConnectionString = _connectionString;
                                DbCommand command = _dbfactory.CreateCommand();
                                command.Connection  = connection;
                                command.CommandText = "SELECT " + _dbNames.DbColName("Data") + " FROM " + _edgeTableName + " WHERE " + _dbNames.DbColName("Page") + "=" + page;
                                connection.Open();

                                DbDataReader reader = command.ExecuteReader();
                                if (reader.Read())
                                {
                                    object obj = reader.GetValue(0);
                                    connection.Close();

                                    EdgePage newEdgePage =
                                        NetworkObjectSerializer.DeserializeEdges((byte[])obj);
                                    _edgePages.Add(page, newEdgePage);
                                    return(newEdgePage);
                                }

                                connection.Close();
                            }
                        }
                        catch { }
                    }
                    return(null);
                }
            }
        public static EdgePage DeserializeEdges(byte[] bytes)
        {
            BinaryReader r = new BinaryReader(new MemoryStream());

            r.BaseStream.Write(bytes, 0, (bytes.Length));
            r.BaseStream.Position = 0;

            EdgePage page = new EdgePage();

            while (r.BaseStream.Position < r.BaseStream.Length)
            {
                int eid = r.ReadInt32();
                int fcid = r.ReadInt32(), oid = -1;
                if (fcid >= 0)
                {
                    oid = r.ReadInt32();
                }
                int n1 = r.ReadInt32();
                int n2 = r.ReadInt32();

                page.Add(eid, fcid, oid, n1, n2);
            }
            return(page);
        }