1

我是 xamarin 的新手,我正在尝试制作包含 sqlite 数据库的 xamarin.form 应用程序。所以我知道该表是创建一次的,但我也有一些默认情况下需要在该表中的记录。我的意思是当创建表时,数据也必须用它初始化一次。根据教程,我有一个类来处理名为DataAccess.cs

class DataAccess : IDisposable
    {
        public void Dispose()
        {
            database.Dispose();
        }

        private SQLiteConnection database;
        public ObservableCollection<DataModel> dataz { get; set; }
        private static object collisionLock = new object();

        public DataAccess()
        {
            database = DependencyService.Get<IConfig>().DbConnection();
            database.CreateTable<DataModel>();

            //database.Insert(new DataModel { Did = 1 , Data = "aaaa"});
            //database.Insert(new DataModel { Did = 2, Data = "bbb" });
            //database.Insert(new DataModel { Did = 3, Data = "ccc" });

            this.dataz = new ObservableCollection<DataModel>(database.Table<DataModel>());



            if (!database.Table<DataModel>().Any())
            {
                addNewData();
            }

        }

        public void addNewData()
        {
            this.dataz.Add(new DataModel { Did = 1, Data = "aa" });
        }

        public void SaveData(DataModel record)
        {
            lock (collisionLock)
            {
                database.Insert(record);
            }
        }

        public DataModel GetDataById(int id)
        {
            lock (collisionLock)
            {
                return database.Table<DataModel>().
                  FirstOrDefault(x => x.Did == id);
            }
        }

        public List<DataModel> GeyAllData()
        {
            return database.Table<DataModel>().ToList();
        }



    }

由于该表是在上面的班级讲师中创建的。所以我尝试在那里初始化数据,但每次运行时都会将数据添加到表中。所以我很困惑如何只在第一次运行时初始化数据。

4

1 回答 1

1

你可以选择两种方式之一。

1:检查表是否尚不存在,如果不存在,则创建并添加数据

var result = await conn.ExecuteScalarAsync<int>("SELECT count(*) FROM sqlite_master WHERE type='table' AND name='DataModel';", new string[] { });
if (result == 0)
{
    await conn.CreateTableAsync<DataModel>();

    // Insert your initial data    
}

2:始终检查数据是否存在,如果不存在则插入

仅供参考:假设Did是您的 PrimaryKeyDataModel

var row = await conn.FindAsync<Record>(1);
if (row == null)
{
   // Insert the "Did = 1" row
}
于 2018-10-07T20:29:03.357 回答