带有 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中切换MySQL / SQL Server

带有 EF6 和 dotConnect for oracle 的 aspnetcore 2.0

使用 linq 在一个 SQL 查询 (EF6) 中为多个数据库列选择可能的值

部署到 IIS8 时 EF 6 与 EF 5 的相对性能问题

带有触发器的 WPF 设计时与运行时样式差异

EF6 + SQL 14:将大量行上传到表中的最有效方法