2010-02-04 88 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運算(類))]