none
Problema formulario ASP:NET MVC y clave primaria string EF RRS feed

  • Pregunta

  • Estimados necesito un poco de ayuda, ya que recién estoy empezando EF y ASP.NET MVC

    Porqué al tener una Entidad hecha con Code First en un proyecto ASP.NET MVC3, al momento de crear el controlador y vincularlo a la entidad para crear las operaciones CRUD, en las vistas no se crea el campo textbox para ingresar el RUT y todos los demás si?

    Este problema lo tengo porque no me sirve crear una clave primaria como ClienteId con tipo de dato int. Lo que necesito es que el campo RUT sea la clave primaria y así sea único en la base de datos, ademas de poder ingresarlo por formulario.

    public class Cliente
        {
           
            [Key]
            public string Rut { get; set; }
            public string Nombre { get; set; }
            public string Direccion { get; set; }
            public string Telefono { get; set; }
            public string Email { get; set; }      
          
        }

    Agradezco cualquier ayuda.

    Saludos


    • Editado croma96 miércoles, 13 de junio de 2012 4:18 Corrección
    miércoles, 13 de junio de 2012 4:16

Respuestas

  • Gracias Eduard, efectivamente me faltaba agregar la dll de EF.

    Ahora voy a probar el tema de las relaciones entre entidades, haciendo referencia explicita y no por convención

    Gracias



    • Editado croma96 miércoles, 13 de junio de 2012 20:02 corrección
    • Marcado como respuesta croma96 jueves, 28 de junio de 2012 14:44
    miércoles, 13 de junio de 2012 19:44

Todas las respuestas

  • Digamos que eso es así "por diseño". Es decir está hecho adrede. En la página de novedades de ASP.NET MVC3 (http://www.asp.net/whitepapers/mvc3-release-notes) pone literalmente:

    The Add View scaffolding also includes improved detection and usage of primary key information on the model, based on convention. For example, the Add View dialog box uses this information to ensure that the primary key value is not scaffolded as an editable form field.

    Dado que tu tienes marcada la propiedad Rut con [Key] ASP.NET MVC no genera un campo editable para ella. Por supuesta puedes añadirlo tu a mano:

    <div class="editor-label">
        @Html.LabelFor(model => model.Rut)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Rut
        @Html.ValidationMessageFor(model => model.Rut)
    </div>

    Un saludo!


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis

    miércoles, 13 de junio de 2012 6:19
  • Primero que nada gracias por responder Eduard.

    Te comento que precisamente estoy aprendiendo ASP.NET MVC gracias a un video que tu hiciste para AUGES en España y además de otras notas técnicas que haz hecho.

    Bien, es cierto que puedo modificar la vista agregando codigo para generar el html necesario, el cual ya habia probado pero no sabia si era lo correcto.

    Ahora tengo otra duda con el tema de las relaciones, si creo otra entidad y quiero importar la clave foranea Rut de la entidad Cliente, entiendo que debo generarla agregando [ForeignKey("Rut")], pero el Visual Studio me reclama por la palabra ForeignKey diciendome que me falta un Using, a pesar que tengo importado el espacio de nombres System.ComponentModel.DataAnnotations.

    También me pregunto si el scaffoldin me generará la vista para ingresar por formulario estos campos, esto no lo he podido comprobar porque tengo el error que comento arriba.

    Gracias.

    miércoles, 13 de junio de 2012 17:11
  • Buenas!

    Tienes agregada la referencia a EntityFramework.dll? Aunque ForeignKeyAttribute está en el espacio de nombres System.ComponentModel.DataAnnotations, el assembly es EntityFramework.dll. Asegúrate de tenerlo referenciado!

    http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.foreignkeyattribute(v=vs.103).aspx

    Un saludo! ;-)


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis

    miércoles, 13 de junio de 2012 18:54
  • Bueno, intenté resolver el problema de la ForeignKey aplicando convención por sobre configuración:

    public class Cliente
        {
            [Key]
            public string Rut { get; set; }
            public string Nombre { get; set; }
            public string Direccion { get; set; }
        }

    public class Vehiculo
        {                
            [Key]
            public string Patente { get; set; }
            public string Marca { get; set; }
            public string Modelo { get; set; }
                      
            public string ClienteRut { get; set; }
            public virtual Cliente ClienteVehiculo { get; set; }                 
        }

    Con esto EF creo la llave foranea RUT en la tabla Vehiculo y el scaffoldin generó un formulario con los campos de la entidad Vehiculo y ademas un combobox para navegar por la tabla Clientes, el problema es que el combobox me muestra datos del campo Nombre y no de Rut.

    Quisiera saber como lo arreglo.

    Gracias

    miércoles, 13 de junio de 2012 18:55
  • Gracias Eduard, efectivamente me faltaba agregar la dll de EF.

    Ahora voy a probar el tema de las relaciones entre entidades, haciendo referencia explicita y no por convención

    Gracias



    • Editado croma96 miércoles, 13 de junio de 2012 20:02 corrección
    • Marcado como respuesta croma96 jueves, 28 de junio de 2012 14:44
    miércoles, 13 de junio de 2012 19:44