【发布时间】:2018-11-24 23:55:50
【问题描述】:
我想将我的 .NET Core EntityFramework DbContext(位于 .net 标准库中)注入到我的 WPF 应用程序中。
开机启动
var container = new UnityContainer();
container.RegisterType<ApplicationDbContext>();
var mainWindow = container.Resolve<MainWindow>();
base.OnStartup(e);
主窗口
private ApplicationDbContext _db;
[Dependency]
public ApplicationDbContext Db
{
get
{
return _db;
}
set
{
_db = value;
}
}
public MainWindow()
{
//StandardDatabase.Commands.Test();
InitializeComponent();
DataContext = this;
FrameContent.Navigate(new PageConsignments());
}
但我在container.Resolve<MainWindow>() 收到此错误:
当前类型 System.Collections.Generic.IReadOnlyDictionary`2[System.Type,Microsoft.EntityFrameworkCore.Infrastructure.IDbContextOptionsExtension] 是接口,无法构造。您是否缺少类型映射?
有谁知道我做错了什么?欢迎任何关于更好的方法的建议
ApplicationDbContext
public ApplicationDbContext() : base() { }
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{ }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder
.UseLazyLoadingProxies()
.UseSqlServer("Server=L-TO-THE-APTOP\\SQLEXPRESS;Database=Maloli;Trusted_Connection=True;MultipleActiveResultSets=true");
optionsBuilder.ConfigureWarnings(x => x.Ignore(CoreEventId.LazyLoadOnDisposedContextWarning));
}
根据 Nkosi 的建议,我从上下文中删除了 ApplicationDbContext(options) ctor,这样就消除了错误。但是我现在在 MainWindow 中检查 Db 的值:
private ICommand goPack;
public ICommand GoPack
{
get
{
return goPack
?? (goPack = new ActionCommand(() =>
{
var c = _db.Parts;
FrameContent.Navigate(new PageConsignments());
}));
}
}
但它返回null
【问题讨论】:
-
您是否正确配置了
ApplicationDbContext与容器。您似乎没有为 DbContext 设置上下文构建器选项 -
删除带有选项的构造函数
-
@Nkosi 这似乎已经摆脱了错误!但是,在
MainWindow中,我可以看到Db是null -
@Bassie 取决于您何时检查其值。如果你在容器有机会注入依赖之前检查它,比如在构造函数中有一个断点,那么在初始化过程中它肯定会为空
标签: c# wpf entity-framework-core .net-standard