от
Я получаю это исключение при создании экземпляра
DbContext
: Системы.Исключение ArgumentNullException: значение не может быть null. Имя параметра: ключ Мой файл
DbContext
:
public sealed class DefectContext : DbContext
{
    //private string _dbPath { get; set; }

    public DbSet i_defect { get; set; }
    public DbSet i_def_mod { get; set; }
    public DbSet i_def_descr { get; set; }
    public DbSet i_foto_def { get; set; }

    public DefectContext()
    {
        Database.EnsureCreated();
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        var dbPath = DependencyService.Get().GetDatabasePath(App.DatabaseName);
        optionsBuilder.UseSqlite($"Filename={dbPath}");
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        // Для i_defect
        // Определение составного первичного ключа
        modelBuilder.Entity().HasKey(p => new { p.c_isso, p.n_def });
        // Определение Nullable полей
        modelBuilder.Entity().Property(p => p.n_constr).IsRequired(false);
        modelBuilder.Entity().Property(p => p.b).IsRequired(false);
        modelBuilder.Entity().Property(p => p.b1).IsRequired(false);
        modelBuilder.Entity().Property(p => p.d).IsRequired(false);
        modelBuilder.Entity().Property(p => p.d1).IsRequired(false);
        modelBuilder.Entity().Property(p => p.r).IsRequired(false);
        modelBuilder.Entity().Property(p => p.r1).IsRequired(false);
        modelBuilder.Entity().Property(p => p.g).HasDefaultValue(false);
        modelBuilder.Entity().Property(p => p.g1).HasDefaultValue(false);
        modelBuilder.Entity().Property(p => p.datef).IsRequired(false);

        // Для i_def_mod
        modelBuilder.Entity().HasKey(p => new {p.c_isso, p.n_def, p.date});
        modelBuilder.Entity().Property(p => p.l_def).IsRequired(false);
        modelBuilder.Entity().Property(p => p.w_def).IsRequired(false);
        modelBuilder.Entity().Property(p => p.c_rem).IsRequired(false);
        modelBuilder.Entity().Property(p => p.v_rem).IsRequired(false);

        // Для i_def_descr
        modelBuilder.Entity().HasKey(p => new {p.c_isso, p.n_def, p.date, p.c_defparam});
        modelBuilder.Entity().Property(p => p.value).IsRequired(false);
        modelBuilder.Entity().Property(p => p.b1).IsRequired(false);
        modelBuilder.Entity().Property(p => p.d).IsRequired(false);
        modelBuilder.Entity().Property(p => p.d1).IsRequired(false);
        modelBuilder.Entity().Property(p => p.r).IsRequired(false);
        modelBuilder.Entity().Property(p => p.r1).IsRequired(false);
        modelBuilder.Entity().Property(p => p.g).HasDefaultValue(false);
        modelBuilder.Entity().Property(p => p.g1).HasDefaultValue(false);

        // Для i_foto_def
        modelBuilder.Entity().HasKey(p => new {p.c_isso, p.n_def, date = (DateTime) p.date});
        modelBuilder.Entity().Property(p => p.foto).IsRequired(false);

        var dateTimeConverter = new ValueConverter(
            // В БД
            v => new DateTimeOffset(v).ToUnixTimeMilliseconds(),
            // Из БД
            v => DateTimeOffset.FromUnixTimeMilliseconds(v).DateTime
        );
        var byteArrayConverter = new ValueConverter(
            // В БД
            v => Convert.ToBase64String(v),
            // Из БД
            v => Convert.FromBase64String(v)
            );

        // Определение конвертации поля в БД
        modelBuilder.Entity().Property(p => p.date)
            .HasConversion(dateTimeConverter);
        modelBuilder.Entity().Property(p => p.date)
            .HasConversion(dateTimeConverter);
        modelBuilder.Entity().Property(p => p.date)
            .HasConversion(dateTimeConverter);
        modelBuilder.Entity().Property(p => p.date)
            .HasConversion(dateTimeConverter);
        modelBuilder.Entity().Property(p => p.foto)
            .HasConversion(byteArrayConverter);
    }
}
Получить путь к файлу базы данных код:
public class IosDbPath : IPath
{
    public string GetDatabasePath(string filename)
    {
        return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "..", "Library", filename);
    }
}
И когда я иду в этой строке кода:
using (var sqliteRepository = new DefectContext()){...}
эта ошибка возникает. Не могу найти никакой информации о том, почему это могло произойти. С. С. Я работаю с iOS симулятор. Пожалуйста, дайте мне несколько советов... Спасибо заранее.

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.

1 Ответ

0 голосов
от
Это может быть вызвано тем, что вы забыли установить
primary key
в класс модели(дефектов,defMods,defDescr,FotoDefects). Добавить [ключ] имущества, квалифицирует его в качестве первичного ключа в соответствующей таблице. Как
[JsonProperty("id")]
[Key]
public int Id { get; set; }
...