2012-05-30 24 views
7
identidad

que simplifica el código un poco de tiempo tratando de depuración:con la identidad '' no existe en la colección de metadatos r nParameter nombre:.

[HttpPost] 
    public ActionResult Register(User model) 
    { 
     DateTime bla = new DateTime(2012, 12, 12); 
     try 
     { 
      User user = new User 
      { 
       gid = 1, 
       cid = 1, 
       firstName = model.firstName, 
       lastName = model.lastName, 
       email = model.email, 
       username = model.username, 
       password = model.password, 
       creationDate = bla, 
       active = 1 
      }; 
      myContext.Users.AddObject(user); 
      myContext.SaveChanges(); 

     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 

     return View();    
    } 

Los valores son transmitidas en consecuencia. tabla de usuarios:

[id] [int] IDENTITY(1,1) NOT NULL, 
[cid] [int] NULL, 
[gid] [int] NULL, 
[firstName] [nvarchar](100) NOT NULL, 
[lastName] [nvarchar](100) NOT NULL, 
[email] [nvarchar](max) NOT NULL, 
[username] [nvarchar](100) NOT NULL, 
[password] [nvarchar](100) NOT NULL, 
[creationDate] [datetime] NOT NULL, 
[active] [int] NOT NULL, 

CONSTRAINT [PK_ usuarios _3213E83F0AD2A005] CLAVE principal agrupada

He eliminado todas las claves externas para asegurarse de que nada le afecta. Estoy seguro de que en un momento anterior estaba funcionando, pero ahora no puedo entender dónde está el problema. Se estrella en el desempeño de las SaveChanges:

{"An error occurred while updating the entries. See the inner exception for details."} 
{"The member with identity '' does not exist in the metadata collection.\r\nParameter name: identity"} 
+0

por qué usted es crear instancias de un nuevo usuario y establecer las propiedades? Puede establecer directamente las propiedades no enlazadas al modelo ¿verdad? – VJAI

+0

intenté usar la solución a continuación (sin instanciar un nuevo objeto de Usuario) pero no está funcionando. –

+0

¿El modelo de usuario tiene identificación de propiedad? – VJAI

Respuesta

7

La cuestión estaba reproduciendo a causa de un disparador que estaba sobre la mesa los usuarios. Lo eliminó y el problema ya no se reproduce.

0

probar este

[HttpPost] 
public ActionResult Register(User model) 
{ 
    DateTime bla = new DateTime(2012, 12, 12); 
    try 
    { 
     model.gid = 1; 
     model.cid = 1; 
     model.creationDate = bla; 
     model.active = 1; 

     myContext.Users.AddObject(model); 
     myContext.SaveChanges(); 

    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex); 
     throw; 
    } 

    return View();    
} 
+0

Todavía recibo el error –

5

que tenían el mismo error de ser lanzado cuando trato de insertar el uso de EF, el error fue

The member with identity 'Id' does not exist in the metadata collection.\r\nParameter name: identity

No estaba claro al principio, pero el mensaje de excepción fue muy concisa, porque mi base de datos conoce el columna Id int pero la propiedad creada para el objeto en mi código era int ID volviendo a la asignación con nombre, Id no está asignado a ID.

Así que cuando se envía un objeto con la propiedad ID a la base de datos que solo conoce Id, obtendrá el error anterior.

espero que esto ayude, gracias

2

creo que la mejor solución está en this puesto. Usé la tercera opción y funciona. Aquí informar de la respuesta en el enlace:

The issue could be related to a "instead of insert" trigger on one of your tables.

The EF framework is performing validation on the inserted row of data by calling scope_identity(). However, an "instead of insert" trigger will change the context of the insertion in such a way that the EF system's call to scope_identity will return null.

A couple ways around this:

  1. Use a stored procedure to insert the data (not tested)
  2. Remove the instead of insert trigger (triggers can cause other problems, so some people argue not to use them) (tested, works!)
  3. Turn off validation in the EF framework, so: context.Configuration.ValidateOnSaveEnabled = false (tested, works!)
1

Tenía este mismo error hoy y pasamos unas cuantas horas de frustración tratando de averiguarlo.

Estaba usando Entity Framework para insertar un registro con una columna de identidad en una tabla de base de datos del servidor SQL. Suficientemente simple.

La tabla tenía un disparador que a su vez ejecutaba un procedimiento almacenado. El procedimiento almacenado tenía una línea en él:

select newid() 

Esta es la línea que se rompió Marco de la entidad.

Para tablas con columnas de identidad, Entity Framework espera que se devuelva una sola fila con un solo campo que es la columna de identidad.

3

Probablemente haya un disparador en la tabla que se está actualizando y devuelve la salida. La salida se descarta pero entra en conflicto con EF.Dicha salida se utiliza a menudo para los disparadores de depuración (y olvidado borrar después):

select 'trigger called, i am here' 

o puede ser variable que falta:

select column 

en lugar de

select @variable=column 
-1

Ésta es la primera La página Google volvió cuando busqué una explicación de mi versión de un problema que produce este mensaje de error, así que lo mencionaré aquí, junto con la resolución que tenía para mí.

En mi versión del problema, el código infractor era la siguiente:

foreach (var comp in colorstyle.Companions) 
     comp.LinkCS = db.ColorStyles.Find(comp.LinkColorStyleId); 

que heredaron el trabajo de mantenimiento y apoyo de la aplicación que tuvo este código en él. Este código establece la propiedad de navegación para la entidad ya relacionada, utilizando la propiedad de clave externa asociada del mismo objeto como una búsqueda. Eso es completamente innecesario, y aparece a veces .. no siempre .. producir este error:

"El miembro de la identidad 'Customization_ColorStyleCustomizations_Source' no existe en la colección de metadatos Nombre de parámetro:. Identidad"

que es toda una mensaje de error, ¿verdad?

Durante dos años, este código estaba allí sin arrojar ningún error, y de repente, un día, comenzó a producir este error para ciertos estilos de color. /sacudir. No entiendo eso. Pero no es necesario, y sacarlo resuelve el problema, entonces. En caso de que alguien más con el mismo problema general pase por esto, aquí está.

(En caso de que no estaba claro - en este caso, la resolución era simplemente para eliminar el código.)

Cuestiones relacionadas