我正在学习实体框架教程,希望将我工作中的数据库/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";
}
}
}
从您的图像来看,您似乎创建了一个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