提问者:小点点

易于理解的NET实体框架应用程序只是打开了一个ASP。NET网页时执行


我正在学习实体框架教程,希望将我工作中的数据库/ETL/SQL技能和Unity的C#dev技能结合起来。

因此,这是我的第一个项目。unity C#world之外的NET框架。

设置:我在计算机上创建了一个本地数据库,并已通过SQL ManagementStudio成功连接到该数据库。我有两个模范班,一个是作家,一本是书。我有一个从DbContext扩展的LibraryContext类和一个从Controller扩展的HomeController。启动时,ConfigureServices()方法中添加了一行额外的内容。cs,除了启动。cs类保持不变。见下文。

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<LibraryContext>(option => option.UseSqlServer(Configuration.GetConnectionString("LibraryDemo1")));  //this is the additional code
            services.AddRazorPages();
        }

意图行为:执行时,意图是将两个模型类(作者和图书)创建为本地数据库中的表。这是不会发生的。

它看起来不像是在执行我的代码,因为例如,当我将DB连接字符串更改为一些无意义的字符串时,它甚至不会抛出错误。所以这就好像它甚至没有试图接触到数据库。

我觉得这里有一些更大的事情我不理解,可能是关于项目设置或配置。例如,我甚至不知道下面的Index()方法是如何被调用的,在我的教程中也没有看到对它的调用。请参阅下面的相关代码。我不会发布Author和Book类,因为它们非常简单。

任何帮助都将不胜感激。谢谢你!



//lots of Usings above here, not posting for the sake of space
namespace CodeFirstEntityFramework.Data
{
    public class LibraryContext : DbContext
    {
        public LibraryContext(DbContextOptions<LibraryContext> options)
            : base(options)  //this calls the base constructor from the DbContext class
        {
            
        }
        //the DbSet represents an entire table
        public DbSet<Author> Author { get; set; }
        public DbSet<Book> Book { get; set; }
    }
}
namespace CodeFirstEntityFramework.Controllers
{
    public class HomeController : Controller
    {
        private LibraryContext _context;

        public HomeController(LibraryContext context)
        {
            _context = context;
        }

        public string Index()
        {
            _context.Database.EnsureCreated();
            return "DB has been created";
        }
    }
}


共1个答案

匿名用户

从您的图像来看,您似乎创建了一个ASP。NET网页应用程序,而不是MVC项目。

要执行重新创建的文件,需要将其放入索引中。html。cs文件,位于OnGet()方法内部。

public class IndexModel : PageModel
{
    private readonly ILogger<IndexModel> _logger;
    private LibraryContext _context;

    public IndexModel(ILogger<IndexModel> logger,LibraryContext context)
    {
        _logger = logger;
        _context = context;
    }

    public void OnGet()
    {
        _context.Database.EnsureCreated();
    }
}

如果出现更多的错误,那么它也可能是配置上的问题,所以我会要求查看Startup.cs