对象引用未设置为在单独项目中从 DAL 抛出的对象的实例

Posted

技术标签:

【中文标题】对象引用未设置为在单独项目中从 DAL 抛出的对象的实例【英文标题】:Object reference not set to an instance of an object being thrown from DAL in seperate project 【发布时间】:2015-03-19 12:23:27 【问题描述】:

温柔点,它只是一种假象,它看起来像复制品,但情况不同;)

我有一个包含三个独立项目的解决方案,主项目以及一个 BLL 和一个 DAL 项目(n 层)。在 DAL 中,我从现有数据库生成了 Linq To SQL 类,以及一个包含所有 crud 操作的类,以及另一个用于自定义数据类的类。 主项目引用 BLL,BLL 引用 DAL。

在主项目中,我从 BLL 中的一个方法填充一个网格,该方法从 DAL 调用该方法并返回一个列表。我已经单步执行了代码,但我不断收到错误消息。

对象引用未设置为对象的实例。

它让我在我的 Linq To SQL 类 (.dbml) 设计器中使用了这种方法

public BasicInventoryDBDataContext() : 
base(global::System.Configuration.ConfigurationManager.ConnectionStrings["BasicInventoryConnectionString"].ConnectionString, mappingSource)

当我尝试将数据绑定到网格时。 我在我的 webconfig 中查看了 DAL 项目,它似乎是合法的,因为连接字符串在那里。

我查看了 SO 并看到了与此错误类似的问题,但是当 DAL 位于单独的项目中时(我发现没有),更不用说使用 Linq To SQL 时了。

我已经尝试过删除 DAL 和 BLL 项目并重新创建它们(这没什么大不了的,因为我刚刚启动了这个项目,而且它还处于起步阶段)。当我在同一个项目中有 Linq To SQL 类时,我没有遇到这个问题。 有什么想法吗?

编辑 这是我在继续之前用来确保一切正常的页面。

#region Initialization

public BasicInventoryDAL bl = new BasicInventoryDAL();

#endregion

protected void Page_Load(object sender, EventArgs e)

    rgVendor.DataSource = bl.GetVendorBrowse();
    rgVendor.DataBind();

我已经中断了 BasicInventoryDAL 的初始化,当我逐步完成时,它会将我带到 DAL 项目

 public class BasicInventoryDAL
 
    #region Initialization

    public BasicInventoryDBDataContext dc = new BasicInventoryDBDataContext();

    #endregion

    public List<VendorBrowse> GetVendorBrowse()
    
        List<VendorBrowse> lst = new List<VendorBrowse>();

        var queryGetVendorBrowse = from f in dc.vw_Vendor_Browses
                                   select f;

        foreach (var v in queryGetVendorBrowse)
            lst.Add(new VendorBrowse
            
                VendorID = v.VendorID,
                VendorName = v.VendorName,
                City = v.City,
                Country = v.Country
            );

        return lst;
    

一旦到达public BasicInventoryDBDataContext dc = new BasicInventoryDBDataContext();,就会抛出错误。

这是我的网络配置中的连接字符串

<connectionStrings>
    <add name="BasicInventoryConnectionString" connectionString="Data Source=HERBERT\SQLEXPRESS;Initial Catalog=BasicInventory;Integrated Security=True"
        providerName="System.Data.SqlClient" />
</connectionStrings>

【问题讨论】:

如果您不希望问题重复,您需要提供可操作的信息。到目前为止,您的帖子非常接近“发生了错误,我尝试了很多”。对于不熟悉您的代码的人,需要提供更多详细信息来建议一些具体步骤来解决它。 @AlexeiLevenkov,我明白你在说什么。如果没有代码和步骤,它看起来也很模糊。我将进行编辑并显示所有内容并添加更多细节。 NullReferenceException 的几乎所有情况都是相同的。请参阅“What is a NullReferenceException in .NET?”获取一些提示。 谁生成代码无关紧要 - 原因是一样的。尤其是在这种情况下,因为这也是一个正确的值是否在正确的配置文件中的问题。 @Chris:没有什么比 NullReferenceException 更多的是由一段假定引用永远不会为空的代码引起的。只是发生错误假设的代码是生成的代码,而引用为空的原因是连接字符串位于错误的配置文件中。 【参考方案1】:

NullReferenceException 被抛出,因为连接字符串在错误的配置文件中定义。生成的代码假定连接字符串可用。这是一个错误的假设,即使是 Microsoft 做出了错误的假设。

从第一天开始,.NET 配置就一直存在于与可执行代码关联的配置文件中。对于 ASP.NET,它需要位于与 Web 应用程序关联的 web.config 文件中。对于 .EXE,它必须在 programname.exe.config 中。

【讨论】:

以上是关于对象引用未设置为在单独项目中从 DAL 抛出的对象的实例的主要内容,如果未能解决你的问题,请参考以下文章

Roles.GetRolesForUser 抛出异常对象引用未设置为对象的实例

SSIS 脚本任务抛出未设置为对象实例的对象引用

Silverlight 添加到 List<T> 抛出未设置为对象实例的对象引用

Blazor Webassembly:对象引用未设置为对象 i 的实例

对象引用未设置为 DataGridView 的 InitializeEditingControlValue 中的对象实例

搭建控制器时抛出的调用目标抛出异常