【发布时间】:2016-08-11 20:03:00
【问题描述】:
在这个项目中,我尝试从 .NET 迁移到 .NET Core。这里我有一个我想在 .NET Core 中实现的代码。
public partial class CompanyFormsContext : DbContext
{
public CompanyFormsContext()
: base("name=CompanyFormsContext")
{
}
public CompanyFormsContext(string connName)
: base("name=" + connName)
{
}
...
}
在 .NET Core 中,不接受字符串作为 DbContext 的参数。相反,您可以将 DbContextOptions 作为参数传递。例如,在以下链接中:http://ef.readthedocs.io/en/latest/miscellaneous/configuring-dbcontext.html
你可以看例子:
public class BloggingContext : DbContext
{
public BloggingContext(DbContextOptions<BloggingContext> options)
: base(options)
{ }
public DbSet<Blog> Blogs { get; set; }
}
和
var optionsBuilder = new DbContextOptionsBuilder<BloggingContext>();
optionsBuilder.UseSqlite("Filename=./blog.db");
using (var context = new BloggingContext(optionsBuilder.Options))
{
// do stuff
}
我想做的与此类似。我可以创建一个 DbContextOptions 实例并传递它,但我不知道如何修改 SqlServer 连接,因为我正在通过基类构造函数传递它。
我想不通的最重要的事情是我希望能够保留我的空构造函数,这将触发默认的“CompanyFormsContext”连接。如果我可以简单地更改连接名称,同时将其作为参数传递给 CompanyFormsContext 构造函数,那也很棒。
我认为以下是替代基本构造函数的方法,但我更愿意保留基本构造函数的功能。
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (connName == null)
{
optionsBuilder.UseSqlServer(@"Server=.\;Integrated Security=True;Database=CompanyFormsContext");
}
else
{
optionsBuilder.UseSqlServer(@"Server=.\;Integrated Security=True;Database=" + connName);
}
}
【问题讨论】:
标签: c# asp.net .net entity-framework constructor