public async Task LoadData()
        {
            IReceive r;

            switch (this.ReceiverType)
            {
            case ReceiverDBType.SqlServer:
                var dtdSql = new DBTableData <FakeComparable, SqlConnection>(new SerializeDataInMemory())
                {
                    ConnectionString = ConnectionString,
                    TableName        = TableName
                };
                r = new ReceiverWholeTableSqlServer(dtdSql);
                break;

            case ReceiverDBType.MySql:
                var dtdMySql = new DBTableData <FakeComparable, MySqlConnection>(new SerializeDataInMemory())
                {
                    ConnectionString = ConnectionString,
                    TableName        = TableName
                };
                r = new ReceiverWholeTableMySQL(dtdMySql);
                break;

            case ReceiverDBType.SqlLite:
                var dtdSqlLite = new DBTableData <FakeComparable, SqliteConnection>(new SerializeDataInMemory())
                {
                    ConnectionString = ConnectionString,
                    TableName        = TableName
                };
                r = new ReceiverWholeTableSQLite(dtdSqlLite);
                break;

            default:
                throw new ArgumentException($"not found receiver type {this.ReceiverType}");
            }

            await r.LoadData();

            valuesRead = r.valuesRead;
        }
        public async Task TestLoadWholeTableEachTime()
        {
            #region ARRANGE
            //ADD A DATABASE AND PUT nrPostsToAdd data into table
            ISerializeData sd = new SerializeDataInMemory();

            var connection = new SqliteConnection();
            connection.ConnectionString = "DataSource=:memory:";
            connection.Open();

            var options = new DbContextOptionsBuilder <ApiContext>()
                          .UseSqlite(connection)
                          .Options;
            using (var context = new ApiContext(options))
            {
                context.Database.EnsureCreated();
            }
            int nrPostsToAdd = 10;
            using (var contextAdd = new ApiContext(options))
            {
                for (int i = 0; i < nrPostsToAdd; i++)
                {
                    contextAdd.Posts.Add(new Post()
                    {
                        Id      = i + 1,
                        UserId  = i * 2,
                        Content = "Post" + i
                    });
                }
                await contextAdd.SaveChangesAsync();
            }

            #endregion
            #region ACT
            using (var dt = new DBTableDataSqliteMemory <FakeComparable>(connection, sd)
            {
                ConnectionString = "DataSource=:memory:",
                TableName = "Posts"
            })
            {
                IReceive r = new ReceiverWholeTableSQLite(dt);
                await r.LoadData();

                #endregion
                #region ASSERT

                Assert.AreEqual(nrPostsToAdd, r.valuesRead.Length);
                #endregion
                #region arange add new data into table
                using (var contextAddNew = new ApiContext(options))
                {
                    contextAddNew.Posts.Add(new Post()
                    {
                        Id      = nrPostsToAdd * 2,
                        UserId  = nrPostsToAdd,
                        Content = "Post" + nrPostsToAdd
                    });
                    await contextAddNew.SaveChangesAsync();
                }
                #endregion
                #region act
                await r.LoadData();

                #endregion
                #region assert
                Assert.AreEqual(nrPostsToAdd + 1, r.valuesRead.Length);
                #endregion
                #region arange
                //load from the beginning

                #endregion
                #region act
                await r.LoadData();

                #endregion
                #region assert
                Assert.AreEqual(nrPostsToAdd + 1, r.valuesRead.Length);

                #endregion
            }
        }