实体框架6与实体框架核心-细微的差异?

时间:2020-04-11 08:21:28

标签: c# entity-framework

我正在编写.NET Framework WPF应用程序,并且使用了Entity Framework。最初,我安装了EF Core软件包,并且在做第一个add-migration时收到了著名的错误

无法创建类型为'DbContext'的对象。有关设计时支持的不同模式,请参见https://go.microsoft.com/fwlink/?linkid=851728

但是,这不是我的问题。我知道我以前可以使它工作,并且我注意到那是我使用EF 6而不是EF Core的时候。因此,我卸载了EF Core软件包并安装了EF 6软件包。现在使用EF 6进行迁移就可以了,这很好。

但我的问题是:为什么 IS 起作用?即使我没有通过添加IDesignTimeFactory<DbContext>类的实例添加DbContext或依赖项注入来更改代码。然而,仅通过切换回EF 6仍然可以正常工作。我找不到有关两者之间差异的任何信息(即EF Core和EF 6)来解释这一点。因此,现在我希望这里的人能够以他们的丰富知识启发我。

作为参考,这是我的DbContext课:

public class PinboardContext : DbContext
{
    public PinboardContext() : base()
    {
    }

    public DbSet<Item> Items { get; set; }
}

我的App.xaml.cs类除了是空的构造函数之外都是空的。

最后,如果那很重要,我在app.config中定义了一个connectionString,如下所示:

  <connectionStrings>
      <add name="mpcn" connectionString="Data Source=(localdb)\MSSQLLocalDB;  Initial Catalog=MyPinboardDB;Integrated Security=True;" providerName="System.Data.SqlClient"/>
  </connectionStrings>

请注意,我已经看过this,但这并没有帮助我回答我的问题。

1 个答案:

答案 0 :(得分:0)

可能是因为您必须将Executing command: 'sh' '-c' 'echo hello' 传递给DbContext基类。

如果未提供任何选项,则EF6在默认数据库安装中使用配置文件中具有派生DbContext名称的连接字符串,否则将假定数据库具有派生DbContextOptions<PinboardContext>名称。 / p>

EF Core要求必须提供选项。

在EF Core中,DbContext不是通过注入创建的。如果是通过注入创建的,则必须使用适当的DbContext对其进行配置。如果直接创建,则必须直接提供DbContextOptions<T>