Visual Studio 尝试激活DbContext时,无法解析类型Microsoft的服务,

wn9m85ua  于 2023-11-21  发布在  其他
关注(0)|答案(4)|浏览(163)

当我尝试用视图和实体框架搭建一个MVC控制器时,如下所示:


的数据
我得到这个错误:



这是我的DbContext类:

namespace Infrastructure
{
    public class DataContext : DbContext
    {
        public DataContext(DbContextOptions<DataContext> options) : base(options)
        {
        }

        public DbSet<Owner> owners { get; set; }
        public DbSet<ProtoFile> protoFiles { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Entity<Owner>().Property(x => x.Id).HasDefaultValueSql("NEWID()");
            modelBuilder.Entity<ProtoFile>().Property(x => x.Id).HasDefaultValueSql("NEWID()");

            modelBuilder.Entity<Owner>().HasData(
                new Owner
                {
                    Id = Guid.NewGuid(),  
                    Avatar = "avatar.jpg",
                    FullName = "Mohammad AlMohammad AlMahmoud",
                    Profile = ".NET Full Stack Developer"
                }); 
        }
    }
}

字符串

tyky79it

tyky79it1#

我最终通过添加IDesignTimeDbContextFactory修复了它

public class BloggingContextFactory : IDesignTimeDbContextFactory<BloggingContext>
{
    public BloggingContext CreateDbContext(string[] args)
    {
        var optionsBuilder = new DbContextOptionsBuilder<BloggingContext>();
        optionsBuilder.UseSqlite("Data Source=blog.db");

        return new BloggingContext(optionsBuilder.Options);
    }
}

字符串

gcuhipw9

gcuhipw92#

我通过将此代码添加到DataContext类来解决此问题

protected override void OnConfiguring(DbContextOptionsBuilder DataContext)
    {
        optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Test");
    }

字符串
它被解决了,但生成代码后,我有一些问题,当我运行应用程序,所以我删除它和应用程序成功工作
来自Microsoft文档https://learn.microsoft.com/en-us/ef/core/dbcontext-configuration/

b4qexyjb

b4qexyjb3#

你必须把这段代码添加到你的程序类中(如果你使用net 6)

builder.Services.AddDbContext<DataContext>(options => 
options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));

字符串
或者如果你使用的是net 5或更低版本,将其添加到启动类中。

services.AddDbContext<DataContext>(.....


并删除

base.OnModelCreating(modelBuilder);

falq053o

falq053o4#

这里也有同样的问题。发现我需要将上下文类作为服务添加到Program.cs中的构建器中。在我的情况下,我使用InMemoryDatabase选项

builder.Services.AddDbContext<WebshopContext>(opt =>
opt.UseInMemoryDatabase("AccountRequestList"));

字符串

相关问题