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

当我通过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()是我的局部类中的重载构造函数。

10-04 17:05