ASP.Net数据库查询一个表的异常,即使另一个表工作

时间:2017-03-24 01:25:35

标签: c# sql-server asp.net-mvc database-connection dbcontext

我需要建议我的程序中断的问题。我收到以下错误:

  

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。这没有帮助。

1 个答案:

答案 0 :(得分:1)

我从布朗斯通先生那里了解到Database Adminstrators它归结为我的Order模型类,其属性未正确设置为可空类型以匹配我的数据库表设置。在DATETIME的这个例子中?为空的。

我将重新发布链接NRE crash when property isn't marked as nullable.Null reference when using Take