在完整版本的Prisim中注册EF内核

问题描述 投票:0回答:1

我想在Net.Framework(4.6.2)项目中使用EF.Core 2.2.6。我为数据库创建了一个单独的项目。我想在主项目中使用Prism框架(Unity)上的依赖注入来注册DbContext。

var optionsBuilder = new DbContextOptionsBuilder<DbContext>();
            optionsBuilder.UseSqlite(@"Data Source=CustomerDB.db");
            containerRegistry.GetContainer().RegisterType<DbContext, CrossSettingContext>();
            containerRegistry.GetContainer().RegisterType<DbContext>(
                new InjectionConstructor(optionsBuilder));

The DatabaseContext

  public  class CrossSettingContext : DbContext
    {
        private static Action<DbContextOptionsBuilder> onConfigure;
#pragma warning restore 649

        public CrossSettingContext(DbContextOptions<CrossSettingContext> options) : base(options)
        {
        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.EnableSensitiveDataLogging(true);
            onConfigure?.Invoke(optionsBuilder);
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Setting>().Map();
        }

    }

我收到异常消息。问题是我是否使用正确的方法注册EF Core

System.InvalidOperationException:“未找到与成员匹配的数据。

错误:RegisterType(Invoke.Constructor(Microsoft.EntityFrameworkCore.DbContextOptionsBuilder`1 [Microsoft.EntityFrameworkCore.DbContext])))“

我发现了此Question->但我需要EF Core 2.2.6而不是EntiyFramework 6.0

c# prism unity-container .net-framework-version ef-core-2.2
1个回答
0
投票

我认为您需要通过DbContextOptions<CrossSettingContext>

var optionsBuilder = new DbContextOptionsBuilder<CrossSettingContext>();
optionsBuilder.UseSqlite( @"Data Source=CustomerDB.db" );
containerRegistry.GetContainer().RegisterType<CrossSettingContext>( new InjectionConstructor(optionsBuilder) );
© www.soinside.com 2019 - 2024. All rights reserved.