自动增量的奇怪行为以及来自 sqlite-net-pcl 的

问题描述 投票:0回答:1

我有一个登录功能,可以获取电子邮件和密码,并向用户返回该电子邮件(电子邮件是唯一的)。

我有一个静态数据库类来处理对数据库的访问,在这个函数中我检索登录的用户。

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)}");
    }
}

用户已更新抛出绑定

c# xamarin
1个回答
1
投票

我使用

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递增。

© www.soinside.com 2019 - 2024. All rights reserved.