c# linq-to-sql nullreferenceexception insertonsubmit

c# - NullReferenceException al realizar InsertOnSubmit en LINQ to SQL



linq-to-sql (2)

En mi base de datos tengo una tabla llamada StaffMembers

cuando traigo esto a mi proyecto .net como a través de linq-to-sql, se crea una clase de entidad StaffMember

Ahora también he creado una clase parcial StaffMember en mi proyecto también, para agregar propiedades adicionales que uso en otras capas superiores. p.ej. IsDeleted propiedad. Esta clase parcial también hereda una clase abstracta y una interfaz para asegurarse de que también se implementen otras propiedades.

Ahora cuando creo una nueva instancia de "StaffMember"

p.ej. StaffMember newStaff = new StaffMember (); y dale todas sus propiedades etc

y luego llame a InsertOnSubmit en el contexto a través de mi Administrador.

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

Recibo el error "Referencia de objeto no establecida en una instancia de un objeto".

en context.StaffMembers.InsertOnSubmit (newStaff);

La pila dice

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

Cualquier idea de por qué sucedería esto y cuál es la forma de evitarlo.

Gracias


Bien, encontré mi respuesta en http://social.msdn.microsoft.com/Forums/en/linqprojectgeneral/thread/0cf1fccb-6398-4f16-920b-adef9dc4ac9f

Por si acaso alguno sigue buscando una respuesta.

Este problema ocurre cuando se sobrecarga el constructor en la clase parcial y no se llama al constructor predeterminado en él.

El constructor por defecto de la entidad hace pocas cosas que es requerido por el objeto de contexto.

Por lo tanto, si tiene un constructor de sobrecarga en su clase parcial y lo utiliza para crear el objeto, asegúrese de que se llame al constructor predeterminado en la primera línea

en C # puedes hacer esto por

p.ej.

Customer(string custID)

necesitas agregar un

Customer(string custID):this()

en C # donde el cliente es mi clase y el cliente (string custID): este () es mi constructor de sobrecarga en mi clase parcial.


En algún momento, simplemente se olvidó de agregar esta línea a la clase base:

[InheritanceMapping (Code = "Class", Type = typeof (Class))]