Conexión entre base de datos y código.

Tengo un error:

One or more validation errors were detected during model generation:

\tSystem.Data.Entity.Edm.EdmEntityType: : EntityType 'DynamicMenu' has no key defined.    Define the key for this EntityType.
\tSystem.Data.Entity.Edm.EdmEntitySet: EntityType: EntitySet 'ambt_Dynamic_Menu' is based on type 'DynamicMenu' that has no keys defined.

en la clase auxiliar cuyo código es:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Data.Models;
using Data;

namespace Ambermoda.Web
{
    public class MenuHelper
    {
        public static List<DynamicMenu> GetMenu()
        {
            DataContext db = new DataContext();
            List<DynamicMenu> list = db.ambt_Dynamic_Menu.ToList();

            return list;
        }
    }
}

así que no tengo idea de cómo puedo solucionarlo. Revisé todo lo que (en mi opinión) puede generar este error, pero con ningún resultado.

Tengo publicaciones similares, pero ninguna de ellas resuelve mi problema.

Si alguien tiene alguna idea, por favor escríbala :)

¡Gracias!

Un poco más de código

DynamicMenu.cs

    [Table("abmt_Dynamic_Menu")]
    public class DynamicMenu
    {
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int dmn_id { get; set; }
        public string dmn_code { get; set; }
        public string dnm_parent_code { get; set; }
        public string dnm_title { get; set; }
        public string dnm_title_en { get; set; }
        public int dnm_order { get; set; }
    }

DataContext.cs

public class DataContext : DbContext
{
    public DataContext() { }

    public DbSet<DynamicMenu> ambt_Dynamic_Menu { get; set; }
}

Cadena de conexión:

<add name="DataContext" providerName="System.Data.SqlClient" connectionString="Data Source=Mikasasa-lap\Mikasasa;Database=Ambermoda;Integrated Security=True;Pooling=False;"/>

preguntado el 22 de mayo de 12 a las 11:05

Usted dice que ha verificado 'todo', ¿ha verificado el doble (o incluso el triple) de que el DynamicMenu la tabla en la base de datos tiene una columna de clave principal (y que está asignada a la entidad)? :) Eso es bajo el supuesto de que está trabajando primero con la base de datos. -

Muestra el código de la clase DynamicMenu, por favor. -

Sí. Entonces agrego código de clases -

Al observar DynamicMenu.cs, podemos ver que su columna de identificación tiene la propiedad Identidad, pero no es una clave principal. -

@lucask Entonces, ¿puedes darme alguna pista sobre cómo puedo agregarlo? -

3 Respuestas

De acuerdo con el código fuente que proporcionó, está trabajando con el enfoque Code First.
CF asume que la clase debe tener una propiedad denominada "Id" según la convención de nomenclatura, y esta propiedad se tratará como clave principal.

De lo contrario, debe declarar manualmente la clave principal a través del atributo [Clave] o usar una API fluida (consulte EntityTypeConfiguration.HasKey método).

contestado el 22 de mayo de 12 a las 11:05

Debe informar qué campo es la clave principal de su base de datos. Usa el atributo Key para hacer esto:

[Table("abmt_Dynamic_Menu")]
public class DynamicMenu
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int dmn_id { get; set; }
    public string dmn_code { get; set; }
    public string dnm_parent_code { get; set; }
    public string dnm_title { get; set; }
    public string dnm_title_en { get; set; }
    public int dnm_order { get; set; }
}

contestado el 22 de mayo de 12 a las 11:05

Compruebe si la tabla DyanmicMenu tiene clave principal

contestado el 22 de mayo de 12 a las 11:05

Lo tengo para que pueda ver DynamicMenu.cs - mateusz rogulski

@Mateusz Rogulski No puedo acceder a DynamicMenu.cs - quedarse con hambre

ya ... cuando navego por esa URL, recibo este mensaje "El acceso a este sitio ha sido bloqueado según órdenes judiciales" - quedarse con hambre

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.