c# - 在 LINQ to SQL 中执行 InsertOnSubmit 时出现 NullReferenceException

标签 c# linq-to-sql nullreferenceexception insertonsubmit

在我的数据库中,我有一个名为 工作人员

当我通过 linq-to-sql 将其引入我的 .net 项目时,创建了一个实体类 StaffMember

现在我还在我的项目中创建了一个部分类 StaffMember,以添加我在其他顶层使用的额外属性。例如。 IsDeleted 属性。该部分类还继承了一个抽象类和接口(interface),以确保还实现了一些其他属性。

现在,当我创建“StaffMember”的新实例时

例如。 StaffMember newStaff = 新的 StaffMember(); 并赋予它所有属性等

然后通过我的管理器在上下文中调用 InsertOnSubmit。

Add(StaffMember newStaff)
{
     context.StaffMembers.InsertOnSubmit(newStaff);
     context.Save();
}

我得到一个 “对象引用未设置到对象的实例”错误。

在 context.StaffMembers.InsertOnSubmit(newStaff) 上;

堆栈说

"   at System.Data.Linq.Mapping.EntitySetDefSourceAccessor`2.GetValue(T instance)\r\n   at 
System.Data.Linq.Mapping.MetaAccessor`2.GetBoxedValue(Object instance)\r\n   at 
System.Data.Linq.ChangeTracker.StandardChangeTracker.StandardTrackedObject.HasDeferredLoader(MetaDataMember deferredMember)\r\n   at 
System.Data.Linq.ChangeTracker.StandardChangeTracker.StandardTrackedObject.get_HasDeferredLoaders()\r\n   at 
System.Data.Linq.ChangeTracker.StandardChangeTracker.Track(MetaType mt, Object obj, Dictionary`2 visited, Boolean recurse, Int32 level)\r\n   at 
System.Data.Linq.ChangeTracker.StandardChangeTracker.Track(Object obj, Boolean recurse)\r\n   at 
System.Data.Linq.ChangeTracker.StandardChangeTracker.Track(Object obj)\r\n   at System.Data.Linq.Table`1.InsertOnSubmit(TEntity entity)\r\n   at 
BusinessObjects.StaffMemberManager.Add(StaffMember staffMember) in     
C:\\StaffMemberManager.cs:line 251"

知道为什么会发生这种情况以及解决方法是什么。

谢谢

最佳答案

好的,我在 http://social.msdn.microsoft.com/Forums/en/linqprojectgeneral/thread/0cf1fccb-6398-4f16-920b-adef9dc4ac9f

以防有些人仍在寻找答案。

当您重载分部类中的构造函数,而不调用其中的默认构造函数时,就会出现此问题。

实体的默认构造函数只做一些 Context 对象所需的事情。

因此,如果您的分部类中有重载构造函数并使用它来创建对象,请确保在第一行调用默认构造函数

在 C# 中你可以这样做

例如。

 Customer(string custID)

你需要添加一个

 Customer(string custID):this()

在 C# 中,Customer 是我的类,Customer(string custID):this() 是我的部分类中的重载构造函数。

关于c# - 在 LINQ to SQL 中执行 InsertOnSubmit 时出现 NullReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2198072/

相关文章:

c# - 为什么是 ArgumentNullException?为什么不是 System.NullReferenceException?

debugging - 为什么 .net 中的对象引用错误异常不告诉我哪个对象为空?

c# - 如何从 C# 中的存储过程(SELECT COUNT)获取值

c# - 使用委托(delegate)编写一个方法来接受另一个方法作为输入参数,并且委托(delegate)应该有未知数量的参数

c# - 将 SQL Rank() 转换为 LINQ 或替代方法

c# - 什么是NullReferenceException,如何解决?

c# - 如何以编程方式关闭 IE 保护模式?

c# - 是否有 LINQ 方法来遍历字符串数组?

c# - linq to sql中如何判断是否使用join?

.net - 用于短语的 LINQ2SQL LIKE 命令