【问题标题】:Calling an Entity Framework class inside my console application在我的控制台应用程序中调用实体框架类
【发布时间】:2016-01-13 00:30:14
【问题描述】:

我使用 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 块来引用控制台应用程序中的实体框架类,如下所示:

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

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

【问题讨论】:

    标签: c# asp.net entity-framework visual-studio-2012 console-application


    【解决方案1】:

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

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

    【讨论】:

    • 好的,我明白你的意思了,有没有办法避免使用“使用”块?
    • using 块只是确保调用上下文的Dispose() 方法;释放非托管资源。实际上,您不必使用它,但最佳实践会另有说明。另一种选择是try/finally。在finally手动调用Dispose()。
    • 但我无法在我的情况下引用“sd”,除非我在 using 块中传递 Entities 类。
    • 只需在方法内部而不是外部使用SEntities sd = new SEntities();。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 2020-03-21
    • 1970-01-01
    • 2015-03-02
    • 2011-07-19
    • 1970-01-01
    • 2012-11-03
    相关资源
    最近更新 更多