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
为空。
这是我第一次 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
为空。