我试图找出是否存在我缺少的东西,或者某种方式来解决DbContexts
LinqPad中对Entity Framework Core缺乏支持的问题.我已经编译了我的代码目标4.6.1(如LinqPad论坛上所建议的)并尝试了"Entity Framework V7"驱动程序,但顾名思义,我不相信它是最新的.它仍然要求app.config文件或构造函数的连接字符串.
由于EF Core上下文DbContextOptions
用于构造而不是连接字符串,我以为我可能会创建一个构造函数重载,它接受一个连接字符串,但是它不处理底层数据库驱动程序.有没有办法指定工厂来构建上下文?还有其他可能吗?没有LinqPad,我感到很失落.
最新的EFCore 1.1 LINQPad驱动程序(v1.1.1.1)可以正确使用接受字符串的构造函数(在LINQPad中选择此选项时).
所以可以添加以下构造函数:
public ApplicationDbContext(string connectionString)
: this(new DbContextOptionsBuilder()
.UseSqlServer(connectionString).Options)
{ }
这会将此上下文实例硬连接到sql server provider,但至少不会连接到字符串.此外,您的应用程序不太可能尝试使用此构造函数,EF Core永远不会期望/促进ctor.接受字符串.
为了更加安全,您可以将此构造函数包装起来,#if DEBUG ... #endif
以便它永远不会生成.
该驱动程序似乎有错误/根本没有更新。我找到了一种通过修改DbContext绕过它的方法。
从理论上讲,这应该有效,但不能:
private string _connectionString;
public ApplicationDbContext(string connectionString) : base()
{
_connectionString = connectionString;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (_connectionString == null)
base.OnConfiguring(optionsBuilder); // Normal operation
// We have a connection string
var dbContextOptionsBuilder = new DbContextOptionsBuilder();
optionsBuilder.UseSqlServer(_connectionString);
base.OnConfiguring(dbContextOptionsBuilder);
}
即使您指定“通过接受字符串的构造函数”,LinqPad EF Core驱动程序仍会继续寻找无参数的构造函数。这似乎是驱动程序中的错误。
因此,我给了它想要的东西,一个无参数的构造器。由于未加载IoC / appsettings.json配置阅读器,因此我不得不对连接字符串进行硬编码,而且我不希望在DbContext中单独加载它。但是它可以工作,并且可以让我在模型中的LinqPad中测试EF Core查询。
这对我来说很好:
private bool _isDebug = false;
public ApplicationDbContext() : base()
{
_isDebug = true;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!_isDebug)
base.OnConfiguring(optionsBuilder); // Normal operation
// We are in debug mode
var dbContextOptionsBuilder = new DbContextOptionsBuilder();
// Hardcoded connection string
optionsBuilder.UseSqlServer("data source=XXXX;initial catalog=XXXX;persist security info=True;user id=XXXX;password=XXXX;MultipleActiveResultSets=True;App=EntityFramework");
base.OnConfiguring(dbContextOptionsBuilder);
}
当然,这是现有public ApplicationDbContext(DbContextOptions
的补充。
编辑:注意,它看起来像覆盖了默认行为,除非您将其部署到服务器,否则它是不可见的。