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

Object reference not set to an instance of an object being thrown from DAL in seperate project

温柔一点,只是假象,看起来像一个副本,只是不同的环境;)

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

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

Object reference not set to an instance of an object.

它让我在我的 Linq To SQL classes (.dbml)

设计器中采用了这种方法
public BasicInventoryDBDataContext() : 
base(global::System.Configuration.ConfigurationManager.ConnectionStrings["BasicInventoryConnectionString"].ConnectionString, mappingSource)

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

我环顾四周,看到了与此错误类似的问题,但是 none 当 DAL 在一个单独的项目中时,与(我发现的)有关,更不用说使用 Linq To SQL.

我试过,删除 DAL 和 BLL 项目并重新创建它们(这没什么大不了的,我刚刚开始这个项目,它还处于起步阶段)。当我在同一个项目中使用 Linq To SQL classes 时,我没有遇到这个问题。 有什么想法吗?

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

#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>

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

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