LinqPad Entity Framework 和 NullExceptionReference

LinqPad Entity Framework and the NullExceptionReference

这是我第一次 post 来到这里,我也是 C#/OO 和 LinqPAD 的新手。 (翻译成:我可能 mis-use 概念或术语由于在 'learning mode')

我有一个应用程序,我已将错误缩小到以下查询。我决定试用 LinqPAD 来解决受限环境中的问题。

我们 使用 Entity Framework 进行数据库交互。我正在使用 LinqPAD 的 "C# Program" 选择。

我找到了一个关于如何在 LinqPAD 中使用实体的很棒的教程,这似乎很有效。 (证明:'aEntities' 不会 return 像实体未正确连接时那样的错误)

让我们进入正题。

'var' 我得到:"NullReferenceException: Object reference not set to an instance of an object."

我在这里问这个问题的原因是我看到的每个例子都使用了这种 'var' 方法。由于某种原因它不起作用。我试过声明 'qryDC',创建它的新实例然后分配它。 (我感觉这里的知识薄弱,但正在阅读和学习。)

我读过 John Saunders 写的关于这个主题的史诗。 (哇,伙计!谢谢!) What is a NullReferenceException, and how do I fix it?

然而,我无法将这些知识转化为解决我的问题(学习曲线)。

代码如下:

void Main(AEntities aEntities)
{

  decimal fmProjectUID = 1123;

  var qryDC = 
        from pnp in aEntities.PNonPRs 
            from p in aEntities.Projects
            from pt in aEntities.PurchaseTypes
            from wbs in aEntities.P32
            from pc in aEntities.PPhases
            where pnp.ProjectUID == p.ProjectUID
            where p.ProjectUID == fmProjectUID
            where pnp.PurchaseTypeUID == pt.PurchaseTypeUID
            where pnp.P32UID == wbs.P32UID
            where pt.IsNonPR == 1
            orderby pt.PurchaseTypeID
            select new 
            {
                PNonPrUID = pnp.PNonPrUID
                ,PurchaseTypeID = pt.PurchaseTypeID
                ,PhaseCode = pnp.ProjectPhase.PhaseCode
                ,DANbr = pnp.AType.DANbr
                ,PreAmt = pnp.PreAmt
                ,POStDate = pnp.POStDate
                ,POFDate = pnp.POFDate
                ,BaseAmt = pnp.BaseAmt
                ,Notes = pnp.Notes
        ,ChangedByName = pnp.ChangedByName
            };

 }

如果您需要更多信息,请告诉我。

感谢您的时间、精力和想法。

您不能随意将参数分配给 Main 方法并期望它们被填充。当您 运行 this 时,您的 aEntities 变量为 null,因此空引用异常。您需要实例化您的上下文。

void Main()
{
    decimal fmProjectUID = 1123;

    var aEntities = new AEntities();
    var qryDC = from pnp in aEntities.PNonPRs 
                from p in aEntities.Projects
                from pt in aEntities.PurchaseTypes
                // etc...
}

或者,如果您在 LINQPad 中定义了您的连接,然后为查询选择了所述连接,您可以省略 AEntities 的创建并仅使用以下内容。

void Main()
{
    decimal fmProjectUID = 1123;

    var qryDC = from pnp in PNonPRs 
                from p in Projects
                from pt in PurchaseTypes
                // etc...
}

我还建议您熟悉 Visual Studio 和 LINQPad 中的调试器。如果您设置断点并检查变量,您会发现 aEntities 为空。