2010-02-04 33 views
24

在我的数据库我有一个表称为 StaffMembers的NullReferenceException到SQL

当我把到我的.NET项目这是通过LINQ到SQL创建一个实体类StaffMember

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

现在,当我创建 “StaffMember”

例如一个新的实例。 StaffMember newStaff = new StaffMember(); 并赋予其所有属性等

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

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

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

on 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" 

任何想法,为什么会这样发生的,什么是它周围的方式。

感谢

回答

42

好吧,我发现我的答案上 http://social.msdn.microsoft.com/Forums/en/linqprojectgeneral/thread/0cf1fccb-6398-4f16-920b-adef9dc4ac9f

的情况下,一些仍然在寻找一个答案。

当您重载部分类中的构造函数时,会发生此问题,并且不会调用其中的默认构造函数。

该实体的默认构造函数几乎不需要Context对象所需的东西。

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

你可以做到这一点通过

如。

Customer(string custID) 

你需要在C#中添加

Customer(string custID):this() 

如果客户是我的课堂和客户(字符串CUSTID):这个()是我的部分类我的过载构造函数。

+0

+1解决我的问题!感谢帖子! – xandercoded 2010-05-27 22:06:09

+0

刚刚解决了我的问题以及..非常感谢 – Quango 2011-03-17 08:25:12

+0

耶稣,我从未想过这个......谢谢! – Shackles 2011-03-18 20:56:34

1

有时,只是忘了此行添加到基类:

[InheritanceMapping(代码= “类”,类型= typeof运算(类))]