ASP.Net即使另一个表的数据库查询异常
我需要关于在我的程序中可能出现问题的建议。我收到以下错误:ASP.Net即使另一个表的数据库查询异常
NullReferenceException: Object reference not set to an instance of an object.
针对来自一个控制器的查询,但不是运行相同DbContext连接的另一个控制器。
我决定用通用的ASP.Net Core WebAPI模板从头开始重新开始。我在下面插入了我的两个类,运行了一个构建,并将它们搭建到控制器和视图中,没有任何问题。我甚至有能力从SQL Server对象资源管理器(在Visual Studio 2015社区中)查看两个表中的“查看数据”。我甚至将Order类中的Foreign Key引用移出给Company类。这一切都在一台机器上的测试环境中,我拥有管理员权限和数据库上的dbo。
public class Order{ }
public class Company { }
public class DataMineDbContext : DbContext
{
public DataMineDbContext(DbContextOptions<DataMineDbContext> options) : base(options) { }
public virtual DbSet<Company> Company { get; set; }
public virtual DbSet<Order> Order { get; set; }
}
public class CompaniesController : Controller
{
private readonly DataMineDbContext _context;
public CompaniesController(DataMineDbContext context)
{
_context = context;
}
// GET: Companies
public async Task<IActionResult> Index()
{
return View(await _context.Company.ToListAsync()); //this works
}
}
public class OrdersController : Controller
{
private readonly DataMineDbContext _context;
public OrdersController(DataMineDbContext context)
{
_context = context;
}
// GET: Orders
public async Task<IActionResult> Index()
{
return View(await _context.Order.ToListAsync()); //this throws error
//An unhandled exception of NullReferenceException
}
}
更新:我可以在网址为我的订单控制器创建视图类型,它会插入一个新的记录到数据库,但错误的重定向到“索引”
public async Task<IActionResult> Create(int id, [Bind("Color,CompanyId,Delivered,Filled,ItemName,OrderNumb,Ordered,Price,Qty,Size")] Order order)
{
order.CompanyId = id;
if (ModelState.IsValid)
{
_context.Add(order);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(order);
}
}
侧注:我在同一台服务器上的单独数据库中设置了我的个人帐户登录。我也可以注册一个用户(插入)到AspNetUsers表中,但是当我注销并尝试登录时,它总是失败。不知道这是什么时候开始发生的,也许这些问题是同一问题的一部分;但仍然不确定为什么只有一个表允许查找,但它们都允许更新。同样超出我的经验,无论这是Visual Studio问题还是SQL Server问题。
更新:最大的评论后,我改变了我的connectionString到
"Data Source={ServerName}\{InstanceName}; Initial Catalog={DatabaseName}; Integrated Security=True; Connect Timeout=15; MultipleActiveResultSets=true;"
两个我USERLOGIN数据库和我appDatabase。这使我可以重新登录为用户。它并没有让我查询Order表。因此,我尝试了一个新课程,即State(作为美国所有州的名称/代码),然后我将这个控制器和视图组装起来。该查询现在适用于公司和州,但不适用于订单。所以我认为这与DBSets的DataMineDbContext中的virtual关键字有关,因为State没有支撑它。但是这并没有解决我的问题。因此,我认为它是一个命名约定事项,并在应用程序和我的数据库中重命名为Order to Purchase。这并没有帮助。
我从布朗斯通先生了解到Database Adminstrators它归结为我的Order模型类的属性未正确设置为可空类型以匹配我的数据库表设置。在这种情况下为DATETIME?空。
我会重新发布链接NRE crash when property isn't marked as nullable.和Null reference when using Take
和你确定订单已在数据库中的价值? – Usman
@Usman有两条记录。 “我甚至有能力从SQL Server对象资源管理器到两个表中的”查看数据“。”这也只是索引和编辑中的一个问题。如果我输入一个创建网址,它会将我带到视图并保存一条新记录。我甚至更新了代码以显示订单控制器中的创建操作 – Edward
检查是否存在'MultipleActiveResultSets = true;'您的连接字符串 – Max