如何使用EF5 Code First Approach

时间:2016-01-25 04:08:58

标签: c# wpf

我正在使用VS2013 Ultimate创建WPF应用程序,我想在Visual Studio中创建本地数据库。这是我试图编写的示例connectionString

App.config文件中的ConnectionString

<connectionStrings>
    <add name="RoznamchaContext" 
     connectionString="Server=.;database=sample;integrated security=true;"/>
</connectionStrings>

Context Class就在这里

class RoznamchaContext : DbContext
{
    public DbSet<Admin> Admins { get; set; }
    public DbSet<Tag> Tags { get; set; }
    public DbSet<Task> Tasks { get; set; }
    public DbSet<Task_Tag> Task_Tags { get; set; }

    public RoznamchaContext() : base("RoznamchaContext")
    { }

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

这是我的主要课程,我有一个按钮,当我按下按钮时,它给了我一个图像中显示的异常,按钮点击事件也在下面给出。

public partial class MainWindow : Window
{
    public MainWindow()
    {
        Database.SetInitializer<RoznamchaContext>(null);
        InitializeComponent();
    }

    public static int count = 0;

    private void btn_Click(object sender, RoutedEventArgs e)
    {
        try
        {
            RoznamchaContext context = new RoznamchaContext();
            context.Tags.Add(new Models.Tag { PK_Tag = count, Name = "Tag" + count });
            context.SaveChanges();
            count++;
            btn.Content = count.ToString();
        }catch(Exception ex)
        { MessageBox.Show(ex.Message); }
    }
}

此图显示了名为“btn_Click”的点击事件引发的异常 enter image description here

1 个答案:

答案 0 :(得分:1)

你的连接字符串几乎是正确的。如果您使用的是Entity框架,还应该在配置中添加providerName

<connectionStrings>
  <add name="RoznamchaContext" 
       connectionString="Server=.;database=sample;integrated security=true;"
       providerName="System.Data.SqlClient" />
</connectionStrings>

现在您可以使用连接字符串名称作为DbContext的参数:

class YourContext : DbContext
{
    public YourContext() 
        : base("RoznamchaContext")
    { }
}

当您使用与数据上下文相同的名称命名连接字符串时,也可以使用约定优于配置。然后,您可以使用默认DbContext constructor(不带参数):

class RoznamchaContext : DbContext
{
}

<add name="RoznamchaContext" 
     connectionString="Server=.;database=sample;integrated security=true;"
     providerName="System.Data.SqlClient" />

<强>更新

另一种解决方案是在应用程序启动时指定数据库初始化程序:

// add next line to the Run() method or Main method or other initialization method
Database.SetInitializer<RoznamchaContext>(null);