我需要建议我的程序中断的问题。我收到以下错误:
NullReferenceException:未将对象引用设置为对象的实例。
来自一个控制器的查询,而不是另一个运行相同DbContext连接的控制器。
我决定使用通用的ASP.Net Core WebAPI模板从头开始重启。我在下面插入了我的两个类,运行了一个构建,并将它们搭建到Controllers和Views中,没有任何问题。我甚至可以从SQL Server对象资源管理器(在Visual Studio 2015社区中)到两个表中的“查看数据”。我甚至将Order类中的Foreign Key引用取出给了Company类。这一切都在一台机器上的测试环境中,我有管理员权限,DB上有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
}
}
更新:我可以输入订单控制器的创建视图的URL,它会将新记录插入数据库,但重定向到“索引”的错误
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);
}
}
SIDE注意:我在同一服务器内的单独数据库上设置了个人帐户。我还可以将用户(插入)注册到AspNetUsers表中,但是当我注销并尝试登录时,它总是会失败。不确定何时开始发生这些问题可能是同一问题的一部分;但不确定为什么只有一个表允许查找,但它们都允许更新。此外,我的经验是Visual Studio问题还是SQL Server问题。
更新:Max发表评论后,我将connectionString更改为
“Data Source = {ServerName} \ {InstanceName}; Initial Catalog = {DatabaseName}; Integrated Security = True; Connect Timeout = 15; MultipleActiveResultSets = true;”
用于我的userLogin数据库和我的appDatabase。这允许我重新登录用户。但它没有让我查询Order表。因此,我尝试了一个新的类State(作为所有美国州的名称/代码),然后我将控制器和视图搭建出来。该查询现在适用于公司和州,但不适用于订单。所以我认为它与DBSets的DataMineDbContext中的虚拟关键字有关,因为State没有支持它。但这并没有解决我的问题。因此,我认为它是一个命名约定的东西,并在应用程序和我的数据库中重命名为Order to Purchase。这没有帮助。
答案 0 :(得分:1)
我从布朗斯通先生那里了解到Database Adminstrators它归结为我的Order模型类,其属性未正确设置为可空类型以匹配我的数据库表设置。在DATETIME的这个例子中?为空的。
我将重新发布链接NRE crash when property isn't marked as nullable.和Null reference when using Take