C# 数据库isn';由模型生成的t
我正试图从一个模型生成一个数据库。我相信我已经设置了我在其他问题/步行槽中可以找到的所有内容,但我的数据库似乎没有生成 背景:C# 数据库isn';由模型生成的t,c#,entity-framework,entity-framework-5,C#,Entity Framework,Entity Framework 5,我正试图从一个模型生成一个数据库。我相信我已经设置了我在其他问题/步行槽中可以找到的所有内容,但我的数据库似乎没有生成 背景: public class DatabaseContext : DbContext { public DatabaseContext() : base("Name=DatabaseContext") { } public DbSet<Show> Shows { get; set; } protected ov
public class DatabaseContext : DbContext {
public DatabaseContext()
: base("Name=DatabaseContext") {
}
public DbSet<Show> Shows { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.Configurations.Add(new ShowMap());
}
}
Web.config:
<add name="DatabaseContext" connectionString="Data Source=JEROEN-DESKTOP\SQLEXPRESS;Initial Catalog=NoName;Integrated Security=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
我已经手动创建了模式“NoName”,而没有添加表。执行我的程序没有问题,但是没有生成表。在VSSQLServer对象资源管理器中查看连接时,我可以看到localdb和SQLEXPRESS都不包含任何相关表
另外需要注意的是:我已经使用nuget将EntityFramework添加到我的项目中,但是当我右键单击任何文件/文件夹时,在上下文菜单中看不到EntityFramework。这可能是问题所在吗?我已经删除并添加了EF的项目,但它仍然没有显示。不过,在我的References文件夹中有一个“EntityFramework”条目。我会开始看一些东西,权限就是其中之一。确保委派调用方可以在此数据库上实际创建。还要验证EF是否在调试期间访问数据库
:base(“name=DatabaseContext”)
。如果您可以访问数据库,IntelliTrace将为您提供它正在创建的out put语句
此外,我将验证是否启用了迁移。使用Nuget Package Manager控制台运行,启用-Migrations。完整教程是我没有启用迁移。启用时,我收到了一些关于连接字符串的错误消息。使用修改后的连接字符串创建新用户并授予他所需的权限将删除错误,现在已启用迁移。但这并没有解决问题。我将如何准确地查找EF是否正在访问数据库?我已经按照您的建议在DatabaseContext的
:base()
处放置了一个断点,并且问题不会停止执行。我必须在某个地方显式创建DatabaseContext的新实例吗?该站点运行在哪个应用程序池下?那个应用程序池需要权限,你可以随时授予dbo所有者,然后根据需要调低权限。它只是我机器上的本地爱好项目。它可以拥有所有可用的权限。请确定:这是连接到SQL Express服务器的正确连接字符串吗<代码>是的,看起来不错,标准格式。您是否启用了混合模式身份验证?已解决!我必须首先启用自动迁移(enable migrations-ContextTypeName NoName.Models.Data.DatabaseContext-EnableAutomaticMigrations-Force
),然后更新数据库(update database
)。现在,这些表正以应有的方式出现!
public class DatabaseInitializer : DropCreateDatabaseAlways<DatabaseContext> {
private List<Show> _shows = new List<Show>();
protected override void Seed(DatabaseContext context) {
LoadShows();
_shows.ForEach(s => context.Shows.Add(s));
}
private void LoadShows() {
// Creating models
}
}
Database.SetInitializer(new DatabaseInitializer());
<add name="DatabaseContext" connectionString="Data Source=JEROEN-DESKTOP\SQLEXPRESS;Initial Catalog=NoName;Integrated Security=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />