NullReferenceException при выполнении InsertOnSubmit в LINQ to SQL
В моей базе данных есть таблица StaffMembers
когда я привожу это в свой.net Project, так как через linq-to-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"
Любая идея, почему это происходит, и как это обойти.
Спасибо
2 ответа
Хорошо, я нашел свой ответ на 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(строка custID):this() - мой конструктор перегрузки в моем частичном классе.
Иногда просто забыли добавить эту строку в базовый класс:
[InheritanceMapping (Code = "Class", Type = typeof (Class))]