繁体   English   中英

在完整的 .NET Framework 中在 Prism 中注册 EF Core

[英]Register EF Core in Prism in full .NET Framework

我想在 .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));

数据库上下文:

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]))

我发现了这个问题-> 但我需要 EF Core 2.2.6 而不是 Entity Framework 6.0

Haukinger 的回答部分正确,但遗漏了相当多的重要信息。

你会想要做的事情是:

var optionsBuilder = new DbContextOptionsBuilder<CrossSettingContext>();
optionsBuilder.UseSqlite( @"Data Source=CustomerDB.db" );

但是,您在这里根本不需要任何特定于容器的东西。 您真正需要的是:

containerRegistry.RegisterInstance(optionsBuilder.Options);

如果每次解析时都想要一个新实例,则实际上不需要注册CrossSettingContext 虽然如果你想要一个单身人士,你可以做以下事情:

containerRegistry.RegisterSingleton<CrossSettingContext>();

当你想使用它时,你可以在你的 ViewModel/Services 中注入上下文,如:

public class ViewAViewModel
{
    public ViewAViewModel(CrossSettingContext context)
    {
        // Do Stuff
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM