Я использую 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();
}
}