首先是C#EF代码 - 创建数据库并添加数据

时间:2012-12-21 08:38:29

标签: c# wpf entity-framework

我想创建数据库并添加一些数据。我添加了EF,我想先使用代码。我有这些课程:

public class Question
{
    public bool Sort { get; set; }
    public int QuestionID { get; set; }
    public int Level { get; set; }
    public string Description { get; set; }
    public string Answer1 { get; set; }
    public string Answer2 { get; set; }
    public string Answer3 { get; set; }
    public string Answer4 { get; set; }
    public string RightAnswer { get; set; }
    public bool Show { get; set; }
}

public class QuestionDb : DbContext
{
    public DbSet<Question> Questions { get; set; }
}

这是我的连接字符串:

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

现在我正在创建这样的数据库:

using (var db = new QuestionDb())
        {

            foreach (var question in questions)
            {
                db.Questions.Add(question);
            }
            db.SaveChanges();
        }

它会创建数据库,但如果我想要添加的问题中有一些数据,我会收到错误:

  

实体框架提供程序类型   “System.Data.Entity.SqlServerCompact.SqlCeProviderServices,   EntityFramework.SqlServerCompact,Version = 6.0.0.0,Culture = neutral,   'System.Data.SqlServerCe.4.0'的PublicKeyToken = b77a5c561934e089'   无法加载ADO.NET提供程序。确保提供程序程序集   正在运行的应用程序可用。看到   http://go.microsoft.com/fwlink/?LinkId=260882了解更多信息。

我尝试添加一些初始值设定项,但没有帮助:

Database.DefaultConnectionFactory = new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0",@"C:\Path\To\",@"Data Source=C:\Path\To\DbFile.sdf");
Database.SetInitializer(new CreateDatabaseIfNotExists<QuestionDb>());

那么问题出在哪里?

3 个答案:

答案 0 :(得分:2)

我查看了异常中的链接,将nuget包EntityFramework.SqlServerCompact添加到我的解决方案中,它有所帮助。

答案 1 :(得分:1)

请检查连接字符串提供程序名称...

http://weblogs.asp.net/scottgu/archive/2010/12/08/announcing-entity-framework-code-first-ctp5-release.aspx

希望你能找到这个有用的

Database.DefaultConnectionFactory = new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0",@"C:\\Path\To\\",@"Data Source=C:\\Path\\To\\DbFile.sdf");
Database.SetInitializer(new CreateDatabaseIfNotExists<QuestionDb>());

答案 2 :(得分:1)

在VS包管理器控制台中运行以下命令解决了我的问题:

Install-Package EntityFramework.SqlServerCompact -Pre