SQLite Xamarin PCL

Я разрабатываю приложение в PCL типа Xamarin, для своей структуры БД я хочу использовать SQLite, но у меня есть следующие сомнения...

  1. При вводе записи в моей БД она принимает ID = 0, в моей модели данных используется

     [PrimaryKey, AutoIncrement]
         Public int ViolationID {get; set; }
    

И еще, вхожу в реестр под нулем, не знаю что не так делаю... или это баг в пакете SQLite.NET-PCL?

  1. Как я могу убедиться, что эти записи действительно вводятся? у меня в коде

    public class DataAccess : IDisposable
    {
        private SQLiteConnection connection;
    
        public DataAccess()
        {
            var entity = DependencyService.Get<IEntity>();
            connection = new SQLiteConnection(entity.Plataforma, System.IO.Path.Combine(entity.DirectorioBD, "Infraccions.db3"));
            connection.CreateTable<Infraccion>();
        }
    
        public void InsertInfraccion(Infraccion infraccion)
        {
            connection.Insert(infraccion);
        }
    
        public void UpdateInfraccion(Infraccion infraccion)
        {
            connection.Update(infraccion);
        }
    
        public Infraccion GetInfraccion(int InfraccionID)
        {
            return connection.Table<Infraccion>().FirstOrDefault(c => c.InfraccionID == InfraccionID);
        }
    
        public List<Infraccion> GetInfraccions()
        {
            return connection.Table<Infraccion>().OrderBy(c => c.MotivoID).ToList();
        }
    
        public void DeleteInfraccion(Infraccion infraccion)
        {
            connection.Delete(infraccion);
        }
    
        public void Dispose()
        {
            connection.Dispose();
        }
    }
    

Должен ли я создать таблицу с именем Infraccions.db3 на своем телефоне?

Спасибо за ваши комментарии...


person Cristofher Ambiado Rodriguez    schedule 31.07.2017    source источник


Ответы (2)


Вы говорите, что все новые записи имеют идентификатор 0 и перезаписывают существующую запись в базе данных?

Если это так, то SQLite работает так: для столбцов int 0 является допустимым значением, поэтому, когда идентификатор равен 0, он перезапишет запись вместо увеличения значения.

Правильный способ использования первичных ключей int — определить ваш первичный ключ как обнуляемый int, таким образом, значение для новой записи равно null, которое будет обновлено до следующего доступного идентификатора:

[PrimaryKey, AutoIncrement]
public int? ViolationID {get; set; }

По существу измените int на int?.

person JimBobBennett    schedule 31.07.2017

1) При вводе записи в моей БД она принимает ID = 0, в моей модели данных используется

Вы используете первичный ключ и автоматическое увеличение в своей модели, что означает, что вы не можете ввести 0 вручную в основное поле, и оно автоматически принимает следующее значение в этом поле.

2) Как я могу проверить, что эти записи действительно вводятся?

Вы можете получить путь к файлу БД при создании базы данных, и вы сможете открыть и просмотреть эти данные.

(System.IO.Path.Combine(entity.DirectorioBD, "Infraccions.db3") )

Существует множество плагинов для браузера для доступа к базе данных sqllite.

person Ziyad Godil    schedule 31.07.2017
comment
Я не могу найти файл .db3, вы его создаете скрытым образом? Если да... как мне получить его для публичного режима? Любая помощь для меня - person Cristofher Ambiado Rodriguez; 31.07.2017
comment
Какой телефон вы используете? - person Ziyad Godil; 01.08.2017
comment
Alcatel Pixi 4 @Зияд - person Cristofher Ambiado Rodriguez; 01.08.2017