首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自sqlite-net-pcl的自动增量和where的奇怪行为

来自sqlite-net-pcl的自动增量和where的奇怪行为
EN

Stack Overflow用户
提问于 2021-06-28 23:00:15
回答 1查看 46关注 0票数 0

我有一个登录功能,接受一封电子邮件和pw,并返回给用户的电子邮件(电子邮件是唯一的)

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

代码语言:javascript
复制
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),它会返回null,即使在我的数据库中有3个用户的id为0 (witch也是uid的值) idk为什么。该foreach循环用于调试。

第二个问题是,在我的用户模型中,我用自动增量和主键标记了id属性,但它看起来没有增加id,因为我有3个用户的id为0

我就是这样定义id属性的。

代码语言:javascript
复制
        [PrimaryKey, AutoIncrement]
        public int id { get; }

这就是我添加新用户的地方

代码语言:javascript
复制
     public static async Task<int> Add(User user)
        {
            await Init();
            return await db.InsertAsync(user);

        }

从这里我称它为

代码语言:javascript
复制
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 succed = await DB.Add(User);

            if (succed == 0)
                await App.Current.MainPage.DisplayAlert("Something went wrong with registraition", "Please try again later", "Dismiss");
            else
            {
                await App.Current.MainPage.DisplayAlert("Registraition succeded", "Now you are a member of this awsome app", "WELCOME");
                await Shell.Current.GoToAsync($"//{nameof(LoginPage)}");
            }
        }

用户已更新抛出绑定

EN

回答 1

Stack Overflow用户

发布于 2021-06-29 13:36:38

我使用sqlite-net-pcl version 1.7.335将一些数据保存到sqlite数据库中,看看下面关于创建表和保存数据的代码。

用户类:

代码语言:javascript
复制
 public class SearchModel
{
    [PrimaryKey, AutoIncrement]
    public int ID { get; set; }
    public string PERSON { get; set; }
    public string NAME { get; set; }
}

保存用户数据:

代码语言:javascript
复制
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递增。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68165668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档