在以下情况下使用指令和SQLite有什么问题?我有ObjectDisposedException,但是就在这里? - c#

我在这里没有任何问题,例如:

using FooContext context = new FooContext();
context.RemoveRange(context.FooTable);
context.SaveChanges();

但是,当我通过写新形式而不使用{}时,将“ using指令”与块一起使用(与C#8.0之前为{}一起使用)时,确实得到了ObjectDisposedException。

DbSet<FooThing> allResults;
using (FooContext context = new FooContext()) 
{
   allResults = context.FooTable;               
}
return allResults;

同样,以下内容也没有问题:

FooContext context = new FooContext();
return context.FooTable;

我的代码有什么问题?如何在没有异常的情况下使用using指令?

编辑:

现在,我正在尝试使用DI。
我通过在VS的菜单中选择“ ...使用实体框架”来创建脚手架项目。

在VS创建的类中,顶部有一个DbContext类的实例:

        private readonly FooContext _context;

        public FooController(FooContext context)
        {
            _context = context;
        }

我可以使用此对象,似乎没有问题。

但是现在我得到:


System.InvalidOperationException: Unable to resolve service for type '<Namespaces of my app here>.FooContext' while attempting to activate '<Namespaces of my app here>.FooController'.

我认为这是因为我没有将类型注入适当的容器中。
我应该在哪里做?

我应该在这里做什么吗?

      public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
        }

参考方案

DbSet<T>(即FooTable的实例)是表访问器。您返回的是这个实例(然后由我们假定的实例使用),但是此实例所依赖的关联DbContext实例由您的using块处理。

如果您使用的是asp.net,则应考虑使用依赖注入框架(例如AutoFac)。然后,您可以注册您的DbContext类型,将其注入到Controller中,并且AutoFac将在请求结束时处置DbContext实例。

SQLite-无法连接数据库 - c#

背景:1.它是一个使用Sqlite databse的C#应用​​程序2.如果不存在db,则此应用程序将创建一个空的db,并将数据从服务器同步到该数据库。问题:1.有时应用程序突然崩溃。似乎有一些未处理的异常。2.即使我重新启动该应用程序,它也立即崩溃。临时解决方案:1.将数据库复制到其他位置,然后删除原始数据库。2.运行该应用程序。没有崩溃。由于不存在任何数…

SQLIte SUM日期时间 - c#

我有一个包含行和时间值的数据库。我想要该时间值的总和(通常,格式为%H:%M)。我这样使用SUM值:SELECT SUM(n_hores) FROM table; 但只有我得到0.0。我该怎么做?谢谢 参考方案 hh:mm格式的时间值为字符串,因此不能对字符串进行有意义的求和。您应该将这些时间值转换为数字(strftime(%s)返回自1970-01-01以…

SQLite PDO查询未返回任何结果 - php

无论查询范围如何,都不会获得结果PHP:5.3SQLite3:3.6PDO:5.3.3我认为这应该是一个非常简单的过程,但是即使环顾四周,我仍然不知道为什么我得到0个结果。这是我的代码:<?php $sqlite = new PDO('sqlite:/example.db'); $result = $sqlite->query…

Sqlite WHERE子句使用参数 - c#

尝试使用where子句运行特定查询,这就是我所拥有的。//ID is user input could be anything SqliteParameter Identifier = new SqliteParameter ("@ID", ID); string SQLText = "SELECT Email FROM Cli…

使用Entity Framework Core(2.1)调用标量函数的最佳实践 - c#

我经常需要从Web应用程序(ASP.NET Core / EF Core)中调用在SQL Server上定义的标量函数。由于这些函数只是简单的辅助函数,因此我也使用了许多辅助函数,因此我使用了通用模式来调用这些标量函数-借助EF Core 2.1可用的新查询类型。由于我是EF Core的新手,所以我的问题是这种模式是否会引起问题,并且/或者是否存在调用标量函…