Genera tablas y columnas con otro nombre
-
viernes, 23 de diciembre de 2011 15:51
Buenos dias
Tengo dos entidades, Categoria y Producto. Producto tiene una llave foranea de Categoria.
public class CategoriaDTO { [Key] public Int32 IdCategoria { get; set; } [Required, StringLength(50), RegularExpression("[a-zA-Z ]*")] public string Nombre { get; set; } public IList<ProductoDTO> LProductos = new List<ProductoDTO>(); }
public class ProductoDTO { [Key] public Int32 IdProducto { set; get; } [Required, Column("IdCategoria")] public CategoriaDTO Categoria { set; get; } [Required, Column("IdProveedor")] public ClienteDTO Proveedor { set; get; } [Required, MaxLength(100)] public string Nombre { set; get; } [Required] public double Precio { set; get; } }
---
Estoy definiendo las entidades hacia la bd con EntityTypeConfiguration, y en producto tengo esto:
public class ProductoConfiguration : EntityTypeConfiguration<ProductoDTO> { public ProductoConfiguration() { ToTable("Producto"); Property(c => c.IdProducto).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); Property(c => c.Categoria.IdCategoria).HasColumnName("IdCategoria").IsRequired(); Property(c => c.Proveedor.IdCliente).HasColumnName("IdCliente").IsRequired(); Property(c => c.Nombre).HasMaxLength(100).IsRequired(); Property(c => c.Precio).IsRequired(); } }
Genero la base de datos, pero en las tablas de la base de datos me aparece ProductoDTOes, cuando yo ya le he colocado que ira a la tabla Producto, que puede estar pasando¿?
A parte de eso, como pueden ver me esta generando las columnas de llave foranea de con 'Categoria_IdCategoria', pero
yo deseo que sea solo 'IdCategoria', como puedo hacer estos 2 cambios¿?,
el nombre de las tablas y el de las columnas de llave foranea¿?¿?
Un saludo y muchas gracias
Todas las respuestas
-
miércoles, 04 de enero de 2012 11:08
Hola,
A la hora de generar la base de datos desde el modelo dependiendo de la propiedad "Pluralize New Objects", 'pluraliza' o no el nombre de las tablas.
Respecto a la clave foránea, en el mismo modelo, seleccionando la relación puedes modificarlo.
Recuerda que cada vez que generes el modelo (y ejecutes el script resultante) se borrarán las tablas que hayas creado y se volverán a crear.
En lugar de utilizar "Code First", puedes crear las tablas primero en base de datos (y sus relaciones) y crear el modelo desde base de datos.
- Editado Domingo Samper Lara miércoles, 04 de enero de 2012 11:15
- Marcado como respuesta ccmmasi jueves, 08 de marzo de 2012 21:49
-
jueves, 08 de marzo de 2012 21:49
Como no estoy utilizando ninguna interfaz de diseño para ayudarme, no se como puedo utilizar ese pluralize... en efecto me los esta dejando en plural.. ... bueno, he decidido dejarlo asi, igual me funciona, me enlaza la tabla con la clase con el objeto de mapeo que genere...
muchas gracias Domingo
- Marcado como respuesta ccmmasi jueves, 08 de marzo de 2012 21:49
-
sábado, 10 de marzo de 2012 23:10
Hola ccmmasi,
No es bueno rendirse y todo tiene una explicación, veo que estás utilizando CodeFirst nos puedes mostrar el metodo OnModelCreating de tu Contexto es decir de la clase que hereda de DbContext.
Eso si puedes me gustaría verlo puesto que es en ese metodo donde tienes que agregar a la clase ProductConfiguration
de esta forma
modelBuilder.Configurations.Add(new ProductConfiguration());
Otra opción es que no utilices esta clase y que utilices System.ComponentModel.DataAnnotations y concretamente el atributo Table es decir que tu clase quede decorada de la siguiente forma.
[Table("Producto")] public class ProductoDTO { [Key] public Int32 IdProducto { set; get; } [Required, Column("IdCategoria")] public CategoriaDTO Categoria { set; get; } [Required, Column("IdProveedor")] public ClienteDTO Proveedor { set; get; } [Required, MaxLength(100)] public string Nombre { set; get; } [Required] public double Precio { set; get; } }
Ahora elige uno de los dos caminos o bien definir tus clases con atributos o bien utilizar Fluent Api de Codefirst que es lo que estás haciendo en la clase ProductConfiguration.
Saludos,
phurtado

