NullReferenceException при выполнении InsertOnSubmit в LINQ to SQL
В моей базе данных есть таблица, называемая
StaffMembers
когда я вношу это в мой проект .net, так как через linq-to-sql создается класс Person StaffMember
Теперь я также создал частичный класс StaffMember в моем проекте, чтобы добавить дополнительные свойства, которые я использую в других верхних слоях. например. Свойство IsDeleted. Этот частичный класс также наследует абстрактный класс и интерфейс, чтобы убедиться, что некоторые другие свойства также реализованы.
Теперь, когда я создаю новый экземпляр "StaffMember"
например.
StaffMember newStaff = new StaffMember();
и дать ему все свои свойства и т.д.
а затем вызовите InsertOnSubmit в контекст через мой менеджер.
Add(StaffMember newStaff)
{
context.StaffMembers.InsertOnSubmit(newStaff);
context.Save();
}
Я получаю
Ошибка "Ссылка на объект не установлена в экземпляр объекта".
в контексте .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"
Любая идея, почему это будет происходить и как это происходит вокруг.
Спасибо
Ответы
Ответ 1
Хорошо, я нашел свой ответ на
http://social.msdn.microsoft.com/Forums/en/linqprojectgeneral/thread/0cf1fccb-6398-4f16-920b-adef9dc4ac9f
если кто-то все еще ищет ответ.
Эта проблема возникает, когда вы перегружаете конструктор в частичном классе и не вызываете в нем конструктор по умолчанию.
Конструктор по умолчанию для объекта делает несколько вещей, требуемых объектом Context.
Следовательно, если у вас есть конструктор перегрузки в вашем частичном классе и его использование для создания объекта, убедитесь, что конструктор по умолчанию вызывается в первой строке
в С# вы можете сделать это с помощью
например.
Customer(string custID)
вам нужно добавить
Customer(string custID):this()
в С#, где Клиент - мой класс и Клиент (string custID): this() - мой конструктор перегрузки в моем частичном классе.
Ответ 2
Когда-то просто забыл добавить эту строку в базовый класс:
[InheritanceMapping (Code = "Class", Type = typeof (Class))]