在我的控制台应用程序中调用 Entity Framework class

Calling an Entity Framework class inside my console application

我使用 Visual Studio 2012 创建了一个新的控制台应用程序,并使用 Entity Framework 映射了我的数据库表。现在,当我使用 MVC 等 Web 应用程序时,我通常会执行以下操作,即创建一个表示实体的新对象并引用所有可用实体:

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

但这会引发以下错误:

An object reference is required for the non-static field, method, or property 'ConsoleApplication1.Program.sd' .....\ConsoleApplication1\Program.cs 16 17 ConsoleApplication1

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

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

所以我的问题是,为什么我不能按照第一种方法将整个方法包装在一个 using 块中听起来有点奇怪?

问题是您试图在静态方法中使用 non-static 字段。一个没有在静态方法范围内声明的更具体一点。 using 块不是导致第二个代码块工作的原因。它起作用的原因是因为您在静态方法内部而不是外部有 non-static 字段。

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