在这个项目中,我试图从.NET迁移到.NET Core。这里我有一个我想在.NET Core中实现的代码。如何修改DbContext base构造函数参数作为被传递的参数?
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);
}
}
因此,它不会像这样一个不给我一个错误:http://rextester.com/LISAO70300?我一直在尝试将方法传递给构造函数 –
@KemalTezerDilsiz对不起,我写了我们需要一个静态方法,但是我忘记了代码示例中的'static'关键字。我修好了它。 – Koopakiller