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))]