我使用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();
}
}
但这会引发以下错误:
非静态字段,方法或属性' ConsoleApplication1.Program.sd'需要对象引用。 ..... \ ConsoleApplication1 \ Program.cs 16 17 ConsoleApplication1
我阅读了一些文章,似乎我需要通过打开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();
}
}
}
所以我的问题是,为什么我不能按照第一种方法将整个方法包装在一个使用块声音中并不奇怪?
答案 0 :(得分:2)
问题是您尝试在静态方法中使用非静态字段。未在静态方法范围内声明的更具体的一个。 using
块不是导致第二个代码块工作的原因。它起作用的原因是因为你在静态方法中有非静态字段而不是在它之外。
但是,您实际上应该使用using
块,因为这样可以确保处理上下文。