在控制台应用程序中调用实体框架类

本文关键字:实体 框架 调用 控制台 应用程序 | 更新日期: 2023-09-27 18:30:07

我使用Visual Studio 2012创建了一个新的控制台应用程序,并使用实体框架映射了我的数据库表。现在,当我使用MVC等web应用程序时,我经常做以下事情,即创建一个表示实体的新对象并引用所有可用的实体:

class Program
{
    SEntities sd = new SEntities();
    static void Main(string[] args)
    {            
            sd.Levels.Add(new Level() { Name = "from CA" });
            sd.SaveChanges();
    }
}

但这将引发以下错误:

非静态字段、方法或属性"ConsoleApplication1.Program.sd"需要对象引用。。。。。''控制台应用程序1''Program.cs 16 17控制台应用程序1

我读了一些文章,似乎我需要通过如下打开using块来引用控制台应用程序中的Entity Framework类:

class Program
{
    static void Main(string[] args)
    {
        using (SEntities sd = new SEntities())
        {
            sd.Levels.Add(new Level() { Name = "from CA" });
            sd.SaveChanges();
        }
    }
}

所以我的问题是,为什么我不能遵循第一种方法,将整个方法封装在一个使用块的声音中,这一点都不奇怪?

在控制台应用程序中调用实体框架类

问题是您试图在静态方法中使用非静态字段。一个没有在静态方法的作用域中声明为更具体的。using块并不是导致第二个代码块工作的原因。它之所以有效,是因为你在静态方法内部而不是外部有非静态字段

但是,实际上应该使用using块,因为这将确保上下文被释放。