代码优先 - 为什么我不能看到创建的数据库

时间:2011-01-03 18:32:10

标签: .net entity-framework code-first

<connectionStrings>
    <add name="AnalysedCompanies" 
         connectionString="Data Source=|DataDirectory|AnalysedCompanies.sdf" 
         providerName="System.Data.SqlServerCe.4.0"/>
</connectionStrings>

public class AnalysedCompanies:DbContext
{
    public DbSet<CompanyAnalyse.WebServiceLibrary.MinisterulFinantelorData> DateMinisterulFinantelor { get; set; }
    public DbSet<CompanyAnalyse.WebServiceLibrary.ONRCData> DateONRC { get; set; }
    public DbSet<CompanyAnalyse.WebServiceLibrary.InsolventaData> DateInsolventa { get; set; }
    public DbSet<CompanyAnalyse.WebServiceLibrary.Bilant> Bilant { get; set; }
    public DbSet<CompanyAnalyse.WebServiceLibrary.ContProfitSiPierdere> ContProfitSiPierdere { get; set; }
    public DbSet<CompanyAnalyse.WebServiceLibrary.DateInformativeBilant> DateInformativeBilant { get; set; }  
}

为什么我看不到解决方案资源管理器中创建的sdf文件?显示所有文件都处于活动状态。

保存数据,因为我可以在下次运行时检索它,但是我看不到Code First应该创建的数据库。

3 个答案:

答案 0 :(得分:1)

.sdf文件将位于App_Data或Debug / Release / execution目录中,具体取决于应用程序的类型。

在看到新文件之前,您必须“刷新”这些目录。

答案 1 :(得分:1)

Code First使用许多约定,对于连接字符串,它使用基于数据上下文的完全限定类型的连接字符串,其中包括命名空间。因此,您需要为您的连接字符串yournamespace.AnalysedCompanies命名,而不仅仅是AnalysedCompanies。否则,EF使用基于默认值的连接字符串,即在具有该名称的本地SQLExpress或LocalDB中创建新数据库。

或者,您可以使用带有连接字符串或名称的构造函数将要使用的连接字符串传递给DbContext:

 public AnalysedCompanies() : base ("name=AnalysedCompanies") {}

答案 2 :(得分:0)

有时(特别是如果有另一个连接字符串连接到机器上运行的SQL Server Express实例),DbContext将忽略指定的连接字符串,并将在Express数据库上创建表,而不是CE sdf。

确保上下文使用命名上下文的一种方法是在datacontext的构造函数方法中强制它。

 public class AnalysedCompanies:DbContext
    {
        public AnalysedCompanies() : base ("AnalysedCompanies") {}

        public DbSet<CompanyAnalyse.WebServiceLibrary.MinisterulFinantelorData> DateMinisterulFinantelor { get; set; }
        public DbSet<CompanyAnalyse.WebServiceLibrary.ONRCData> DateONRC { get; set; }
        public DbSet<CompanyAnalyse.WebServiceLibrary.InsolventaData> DateInsolventa { get; set; }
        public DbSet<CompanyAnalyse.WebServiceLibrary.Bilant> Bilant { get; set; }
        public DbSet<CompanyAnalyse.WebServiceLibrary.ContProfitSiPierdere> ContProfitSiPierdere { get; set; }
        public DbSet<CompanyAnalyse.WebServiceLibrary.DateInformativeBilant> DateInformativeBilant { get; set; }


    }

此时,您的DbContext应该利用命名连接,并在预期位置创建文件。