Tai*_*nov 16 c# sqlite datacontext entity-framework .net-core
我在 .NET Core 上有 ConsoleApplication 并且我将我的 DbContext 添加到依赖项中,但是我有一个错误:
无法创建类型为“MyContext”的对象。有关设计时支持的不同模式,请参阅https://go.microsoft.com/fwlink/?linkid=851728
我添加了:var context = host.Services.GetRequiredService<MyContext>();
我private readonly DbContextOptions<MyContext> _opts;
还在我的帖子类中添加了:
using (MyContext db = new MyContext(_opts))
{
db.Posts.Add(postData);
db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
这是我添加服务的方式:
.ConfigureServices((context, services) =>
{
services.Configure<DataOptions>(opts =>
context.Configuration.GetSection(nameof(DataOptions)).Bind(opts));
services.AddDbContext<MyContext>((provider, builder) =>
builder.UseSqlite(provider.GetRequiredService<IOptions<DataOptions>>().Value.ConnectionString));
Run Code Online (Sandbox Code Playgroud)
这是我的上下文:
public sealed class MyContext : DbContext
{
private readonly DbContextOptions<MyContext> _options;
public DbSet<PostData> Posts { get; set; }
public DbSet<VoteData> Votes { get; set; }
public MyContext(DbContextOptions<MyContext> options) : base(options)
{
_options = options;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlite("ConnectionString");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试添加迁移并出现此错误
我做错了什么?
Ste*_*eve 14
我通过在我的上下文中添加一个普通的构造函数来解决这个问题
public class DataContext : DbContext
{
public DataContext()
{
}
public DataContext(DbContextOptions options) : base(options)
{
}
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
if (!options.IsConfigured)
{
options.UseSqlServer("A FALLBACK CONNECTION STRING");
}
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
我今天遇到了这个问题。就我而言,SqlDbContext 位于单独的 ASP.Net Core 3.1 类库项目中,我试图使用该项目的根文件夹中的 dotnet CLI 设置迁移。主 Web 应用程序是默认项目,其中包含连接字符串配置appsettings.json
和启动配置,因此我必须使用-s
开关指定启动项目路径,如下所示。
>dotnet ef migrations add initialcreation -s ..\MyWebApp\MyWebApp.csproj
Run Code Online (Sandbox Code Playgroud)
-s
是启动项目的缩写,当 DbContext 位于与 Web 应用程序项目不同的项目中时,它是实现 IDesignTimeDbContextFactory 的快速替代方法。
该问题的快速解决方案是在您的上下文中实现默认构造函数
public MyContext() : base()
{
}
Run Code Online (Sandbox Code Playgroud)
此解决方案的问题是您必须在“OnConfiguring”函数中显式输入连接字符串,这是不推荐的
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlite("ConnectionString");
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13880 次 |
最近记录: |