【发布时间】:2022-01-23 17:00:00
【问题描述】:
我正在学习关于实体框架的教程,希望能够将我在工作中的数据库/ETL/SQL 技能和我在 Unity 中的 C# 开发技能结合起来。
因此,这是我在统一 C# 世界之外的第一个 .NET 框架项目。
设置:我在我的计算机上创建了一个本地数据库,我已通过 SQL ManagementStudio 成功连接到该数据库。我有两个模型类,一个 Author 和一个 Book。我有从 DbContext 扩展的 LibraryContext 类,以及从 Controller 扩展的 HomeController。 Startup.cs 中的 ConfigureServices() 方法中添加了额外的一行,除了 Startup.cs 类未更改。见下文。
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<LibraryContext>(option => option.UseSqlServer(Configuration.GetConnectionString("LibraryDemo1"))); //this is the additional code
services.AddRazorPages();
}
预期行为:在执行时,目的是将两个模型类(Author 和 Book)创建为本地 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";
}
}
}
【问题讨论】:
-
在某个地方有 Migration 的代码,它在数据库中创建表,是吗?
-
不。正如我刚刚在下面评论的那样,我所关注的类有点旧,并且使用 EntityFramework 2.0。这可能是差异所在吗?我目前正在使用 代码优先 方法,这是值得的。
标签: c# .net sql-server database entity-framework