У меня есть "Roach Motel Data" - данные в БД в порядке, не могут вернуться - PullRequest
0 голосов
/ 02 апреля 2019

Я использую Xamarin.Forms с EF и SqLite. Я установил пакет Nuget «Microsoft.EntityFrameworkCore.Sqlite» в своем проекте. Проблема кода в проекте общего кода, .NetStandard 2.0.

  • Я создал простой класс, скажем, класс CAT для хранения объектов моей таблицы БД
  • Я могу использовать команду "surecreated", и она отлично работает
  • Я могу создать CAT, установить свойства и SaveChanges () для БД; это отлично работает, я вижу данные в БД
  • Я не могу вернуть данные; Я получаю ошибку "объект не установлен на ссылку ...".

Игнорируйте мою пару внешних фигурных скобок; новый для размещения кода и единственный способ собрать все это в один блок. Я обработал специфичный для платформы код (Android & iOS) для получения dbPath в файл SqLite .db3 (здесь не показан).

Не могу понять, что мне не хватает, потому что никакие данные не будут возвращаться из БД Любая помощь высоко ценится!

    {
    public class DatabaseContext : DbContext
    {
        string _dbPath;

        public DbSet<Cat> Cats { get; set; }

        public DatabaseContext(string dbPath)
        {
            _dbPath = dbPath;

            Database.EnsureCreatedAsync();
        }

        public async Task<IEnumerable<Cat>> GetCats()
        {
            var allCats = await Cats.ToListAsync().ConfigureAwait(false);

            return allCats;
        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlite($"Filename={_dbPath}");
        }
    }


    List<Cat> itemSource;

    // Create Database & Tables
    using (var db = new DatabaseContext(App.dbPath))
    {
        // Ensure database is created
        db.Database.EnsureCreated();

        // Insert Data
        db.Add(new Cat() { IdCat = "111", Fname = "Felix1" });
        db.SaveChanges();

        // Retreive Data

        //method 1
        // RESULT:  no data are in "itemsource", info reads "exception count = 1"
        itemSource = db.Cats.ToList();

        // method 2
        // RESULTS:  crashes with error "System.NullReferenceException: Object reference not set to an instance of an object."
        Task<IEnumerable<Cat>> p = db.GetCats();    

        itemSource = db.Cats.ToList();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...