对象引用未设置为在单独项目中从 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 抛出异常对象引用未设置为对象的实例
Silverlight 添加到 List<T> 抛出未设置为对象实例的对象引用
Blazor Webassembly:对象引用未设置为对象 i 的实例
对象引用未设置为 DataGridView 的 InitializeEditingControlValue 中的对象实例