/// <summary>
 /// Read data
 /// </summary>
 /// <typeparam name="E">Type of data</typeparam>
 /// <param name="filter">Mongo filter</param>
 /// <param name="kit">Mongo kit</param>
 /// <returns>Mongo record</returns>
 public new E Get <E>(FilterDefinition <E> filter = null, MongoFilterKit kit = null) where E : IMongoEntityKeyable
 {
     // Read and return the data
     return(SyncKit.Run(() => base.Get(filter, kit)));
 }
        /// <summary>
        /// Read data
        /// </summary>
        /// <typeparam name="E">Type of data</typeparam>
        /// <param name="filter">Mongo filter</param>
        /// <param name="kit">Mongo kit</param>
        /// <returns>Mongo records</returns>
        internal protected async Task <List <E> > Load <E>(FilterDefinition <E> filter = null, MongoFilterKit kit = null) where E : IMongoEntityKeyable
        {
            // Validating E
            MongoHelper.ValidateMongoEntity <E>();
            // Fixing filter
            filter ??= Builders <E> .Filter.Empty;
            // Fixing kit
            kit ??= new MongoFilterKit {
            };
            // Defining options according kit
            var options = kit.ToFindOptions <E>(Configuration.UseLowerCamelCaseProperties);
            // Generating data query
            var data = Session == null ?
                       await Collection <E>().FindAsync(filter, options) :
                       await Collection <E>().FindAsync(Session, filter, options);

            // Returning materialized data
            return(data.ToList());
        }
        /// <summary>
        /// Read data
        /// </summary>
        /// <typeparam name="E">Type of data</typeparam>
        /// <param name="filter">Mongo filter</param>
        /// <param name="kit">Mongo kit</param>
        /// <returns>Mongo record</returns>
        internal protected async Task <E> Get <E>(FilterDefinition <E> filter = null, MongoFilterKit kit = null) where E : IMongoEntityKeyable
        {
            // Fixing kit
            kit ??= new MongoFilterKit {
            };
            kit.Limit = 1;
            // Loading data with only one record kit
            var data = await Load(filter, kit);

            // Returning that single record
            return(data.FirstOrDefault());
        }
 /// <summary>
 /// Read data
 /// </summary>
 /// <typeparam name="E">Type of data</typeparam>
 /// <param name="filter">Mongo filter</param>
 /// <param name="kit">Mongo kit</param>
 /// <returns>Mongo record</returns>
 public new async Task <E> Get <E>(FilterDefinition <E> filter = null, MongoFilterKit kit = null) where E : IMongoEntityKeyable
 {
     // Read and return the data
     return(await base.Get(filter, kit));
 }