带有 EF6 的 WPF 应用程序不会在 SQL Server Enterprise 中创建新数据库
Posted
技术标签:
【中文标题】带有 EF6 的 WPF 应用程序不会在 SQL Server Enterprise 中创建新数据库【英文标题】:WPF application with EF6 does not create new database in SQL Server Enterprise 【发布时间】:2020-05-23 22:32:34 【问题描述】:我正在开发 WPF 应用程序并首先使用实体框架 6 代码作为数据库,但是当我运行该应用程序时,数据库并未在 SQL Server Enterprise 中创建。我google了很多,但找不到任何合适的解决方案,我提前感谢大家。
下面是我的 App.config 文件:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit
http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework"
type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework,
Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
requirePermission="false"/>
</configSections>
<connectionStrings>
<add name="DbConnectionString" connectionString="Data Source=.;Initial
Catalog=CricketAcademy;Integrated Security=True;" providerName="System.Data.SqlClient" />
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
</startup>
<entityFramework>
<providers>
<provider invariantName="System.Data.SqlClient"
type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
</providers>
</entityFramework>
</configuration>
这是我的上下文类:
class Db : DbContext
public Db() : base("name=DbConnectionString")
public DbSet<Player> Players get; set;
public DbSet<Player_Phone> PlayerPhones get; set;
public DbSet<Admission> Admissions get; set;
public DbSet<Fee> Fees get; set;
public DbSet<Coach> Coaches get; set;
public DbSet<Shift> Shifts get; set;
这是我的 MainWindow 类:
public partial class MainWindow : Window
private Db DB = new Db();
public MainWindow()
InitializeComponent();
private void button_Click(object sender, RoutedEventArgs e)
private void Window_Loaded(object sender, RoutedEventArgs e)
【问题讨论】:
如果迁移不存在,您应该添加迁移。然后在代码中使用dbmigrator。 @Anton : 我们不能不迁移吗? 【参考方案1】:添加DbContext
的构造函数:
public Db() : base("name=DbConnectionString")
Database.SetInitializer<Db>(new CreateDatabaseIfNotExists<Db>());
您可以找到更多信息in this article。
【讨论】:
感谢您的回复,我在构造函数中添加了该行,但它仍然没有在 SQL Server 中创建数据库。 @AbdulRaheemGhani 您如何检查数据库是否已创建?您是尝试使用 dbcontext 访问它还是在 SQL Server Explorer(其他程序)中观看它。 EF6 必须在首次访问数据库时调用此初始化程序。创建 dbcontext 不是访问 db。 我去 SQL Server 并检查数据库是否已创建,但在那里找不到。 正如我所说,尝试调用var players = DB.Players
或其他代码来使用您的dbContext 访问db。在此操作中,它将自动创建数据库。如果你想手动创建带有代码的数据库,你应该使用迁移和迁移器以上是关于带有 EF6 的 WPF 应用程序不会在 SQL Server Enterprise 中创建新数据库的主要内容,如果未能解决你的问题,请参考以下文章
带有 EF6 和 dotConnect for oracle 的 aspnetcore 2.0
使用 linq 在一个 SQL 查询 (EF6) 中为多个数据库列选择可能的值