为什么我的项目连接到不同的数据源?

时间:2016-01-24 10:26:56

标签: c# sql-server entity-framework

我有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; }
}

VS

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'(DataSource:(localdb)\ mssqllocaldb,Provider:System.Data.SqlClient,Origin:Convention)。

VS

  

目标数据库是:'Invoicing'(DataSource:。\ SQLEXPRESS,Provider:System.Data.SqlClient,Origin:Convention)。

我的问题

我可以查看哪些内容,以了解他们的行为有何不同?

3 个答案:

答案 0 :(得分:4)

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

EF6 can't find LocalDBConnectionFactory

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

答案 1 :(得分:0)

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

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

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

  3. 要检查的事项?...好好发现两个数据库是否具有完全相同的TABLE NAMES,STORED PROCEDURES等...基本确定两个数据源是否完全相同。

    如果它们不相同是因为一个用于开发票而另一个用于其他东西。

答案 2 :(得分:0)

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

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