我是 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();
}
}
由于该表是在上述类(class)讲师中创建的。因此,我尝试在那里初始化数据,但每次运行时都会将数据添加到表中。所以我很困惑如何仅在第一次运行时初始化数据。
最佳答案
您可以选择以下两种方式之一。
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
是您的 DataModel
的主键
var row = await conn.FindAsync<Record>(1);
if (row == null)
{
// Insert the "Did = 1" row
}
关于sqlite - Xamarin.Forms SQLite,在创建表时初始化数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52692200/