在我的数据库中,我有一个名为的表 StaffMembers
当我通过linq-to-sql将其带入我的.net项目时,创建了一个实体类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"
任何想法为什么会发生这种情况以及围绕它的方式。
由于
答案 0 :(得分:42)
如果有些人仍在寻找答案。
当您在部分类中重载构造函数时,会发生此问题,而不会在其中调用默认构造函数。
实体的默认构造函数执行Context对象所需的一些操作。
因此,如果您的部分类中有重载构造函数并使用它来创建对象,请确保在第一行中调用默认构造函数
在C#中你可以通过
来做到这一点例如
Customer(string custID)
您需要添加
Customer(string custID):this()
在C#中,Customer是我的类和Customer(字符串custID):this()是我的部分类中的重载构造函数。
答案 1 :(得分:1)
有时,只是忘了将这一行添加到基类:
[InheritanceMapping(Code =“Class”,Type = typeof(Class))]