【问题标题】:Why do my projects connect to different data sources?为什么我的项目连接到不同的数据源?
【发布时间】:2016-01-24 10:26:56
【问题描述】:

我有 2 个解决方案,使用 EF 6.0,并且都使用完全相同的默认配置。不过,它们连接到 2 个不同的数据源!? (localdb)\mssqllocaldb 和 .\SQLEXPRESS。

我的配置:

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>

两者的 DbContext 也相似:

public class PlusUltraContext : DbContext
{
    public PlusUltraContext() : base("PlusUltra")
    {

    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

        base.OnModelCreating(modelBuilder);
    }

    public DbSet<Models.Article> Articles { get; set; }
    public DbSet<Models.ArticleComment> Comments { get; set; }
}

public class InvoicingContext : DbContext
{
    public DbSet<Address> Addresses { get; set; }
    public DbSet<Company> Companies { get; set; }
    public DbSet<Country> Countries { get; set; }
    public DbSet<Currency> Currencies { get; set; }
    public DbSet<Invoice> Invoices { get; set; }
    public DbSet<InvoiceLine> InvoiceLines { get; set; }
    public DbSet<Person> Persons { get; set; }
    public DbSet<Unit> Units { get; set; }

    public InvoicingContext() : base("Invoicing")
    {

    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        base.OnModelCreating(modelBuilder);
    }
}

但是,当我运行 Update-Database 命令时,第一个项目连接到 .\SQLEXPRESS,而另一个连接到 (localdb)\mssqllocaldb

目标数据库是:'PlusUltra'(数据源:(localdb)\mssqllocaldb,提供者:System.Data.SqlClient,来源:约定)。

目标数据库是:'Invoicing'(数据源:.\SQLEXPRESS,提供者:System.Data.SqlClient,来源:约定)。

我的问题

我可以检查哪些内容以了解它们为何表现不同?

【问题讨论】:

    标签: c# sql-server entity-framework


    【解决方案1】:

    感谢这篇文章,我找到了答案:

    EF6 can't find LocalDBConnectionFactory

    在使用 .\SQLEXPRESS 的解决方案中,启动项目是另一个类库,它不包含 EF 配置文件。一旦我将启动项目设置为包含配置文件的项目,一切都按预期工作,并且使用了 mssqllocaldb。

    【讨论】:

      【解决方案2】:

      很难知道为什么,但这里有一些可能的原因

      1. 您的软件实际上依赖于两个数据源(一个具有与某些客户/信息相关的信息,另一个具有其他补充信息)许多系统或设计依赖于多个数据库或数据源

        李>
      2. 创建该解决方案的人拥有本地测试环境和生产环境,并且可能通过其他方式评论或在两者之间切换

      要检查的东西?...很好地找出两个数据库是否具有完全相同的表名、存储过程等...基本上确定两个数据源是否完全相同。

      如果它们不一样,是因为一个用于开发票,另一个用于其他。

      【讨论】:

        【解决方案3】:

        要检查的另一件事是,如果您的解决方案中有 2 个项目。确保它是正确的。如果您键入update-database -verbose,它将显示使用启动项目。如果是错误的,请转到解决方案属性并更改它。

        使用错误的数据库可能会选择错误的数据库,并且会做一些非常奇怪的事情。例如,我有几个模型 - 2 个使用正确的数据库可以正常工作,但第 3 个没有。不知道为什么,但是当我对启动项目进行排序时,一切都恢复了正常。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-12
          • 1970-01-01
          • 1970-01-01
          • 2019-05-21
          • 2022-07-01
          相关资源
          最近更新 更多