我有一个登录功能,可以获取电子邮件和密码,并向用户返回该电子邮件(电子邮件是唯一的)。
我有一个静态数据库类来处理对数据库的访问,在这个函数中我检索登录的用户。
public static async Task<User> GetUser(string email, int uid)
{
await Init();
// var user = await db.GetAsyn<User>(id);
var user = await db.Table<User>().Where(x => x.Email == email).FirstAsync();
List<User> list = await db.Table<User>().ToListAsync();
var list1 = await db.Table<User>().Where(x => x.id == uid).ToListAsync();
foreach(var usr in list)
{
var name = user.Name;
var em = user.Email;
var id1 = user.id;
}
return user;
}
我看到了两个问题。如果我使用
Where(x => x.id == uid)
,即使在我的数据库中有3个用户的id为0(这也是uid的值),它也会返回null,我不知道为什么。 foreach 循环用于调试。
第二个问题是,在我的用户模型中,我用自动增量和主键标记了 id 属性,但看起来它没有增加 id,因为我有 3 个 id 为 0 的用户
这就是我定义 id 属性的方式
[PrimaryKey, AutoIncrement]
public int id { get; }
这是我添加新用户的地方
public static async Task<int> Add(User user)
{
await Init();
return await db.InsertAsync(user);
}
从这里我称之为
async Task Register()
{
if (!(IsEmailValid && IsNameValid && IsPwValid && IsPwconfValid))
{
await App.Current.MainPage.DisplayAlert("Data entered is not valid", "Please check the text in red", "Dismiss");
return;
}
var succeed = await DB.Add(User);
if (succeed == 0)
await App.Current.MainPage.DisplayAlert("Something went wrong with registration", "Please try again later", "Dismiss");
else
{
await App.Current.MainPage.DisplayAlert("Registration succeeded", "Now you are a member of this awesome app", "WELCOME");
await Shell.Current.GoToAsync($"//{nameof(LoginPage)}");
}
}
用户已更新抛出绑定
我使用
sqlite-net-pcl version 1.7.335
将一些数据保存到sqlite数据库中,看看下面关于创建表和保存数据的代码。
用户类别:
public class SearchModel
{
[PrimaryKey, AutoIncrement]
public int ID { get; set; }
public string PERSON { get; set; }
public string NAME { get; set; }
}
保存用户数据:
public partial class Page2 : ContentPage
{
public SQLiteConnection conn;
public Page2()
{
InitializeComponent();
conn= GetSQLiteConnection();
}
public SQLiteConnection GetSQLiteConnection()
{
var fileName = "SearchModel.db";
var documentPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
var path = Path.Combine(documentPath, fileName);
var connection = new SQLiteConnection(path);
return connection;
}
private void btnadd_Clicked(object sender, EventArgs e)
{
//var data = conn.Table<SearchModel>();
for(int i=0;i<20;i++)
{
SearchModel model = new SearchModel();
model.PERSON = "person "+ i;
model.NAME = "cherry "+ i;
conn.Insert(model);
}
}
private void createdb_Clicked(object sender, EventArgs e)
{
conn.CreateTable<SearchModel>();
}
}
向sqlite数据库插入数据成功,Id递增。