tutorial mvc migrations framework first español code c# entity-framework ef-code-first

c# - mvc - entity framework database first



Asignación de columnas en el código de Entity Framework primero (2)

Tengo problemas para tratar de asignar mi modelo EF 4.1 Code First a una base de datos. Todo funciona bien cuando la base de datos coincide exactamente con el código, pero cuando trato de mapear cuando las columnas difieren en el nombre, entonces me encuentro con problemas.

Estaba siguiendo un tutorial que debe haber sido desarrollado con una de las compilaciones de CTP porque faltan algunos métodos / diferentes.

Mi modelo se ve así:

public class Dinner { public int DinnerID { get; set; } public string HostedBy { get; set; } public DateTime EventDate { get; set; } public string Title { get; set; } public string Address { get; set; } } public class NerdDinners : DbContext { public DbSet<Dinner> Dinners { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { // THIS IS WHAT I TRIED BUT IT IS FAILING modelBuilder.Entity<Dinner>().Map(mc => { mc.Properties(c => new { colID = c.DinnerID, colTitle = c.Title, colHost = c.HostedBy, colDate = c.EventDate, colAddress = c.Address }); mc.ToTable("tblDinner"); } ); } }

Quiero que mi mesa sea:

tblDinners colID colHost colDate colTitle colAddress

Estoy recibiendo este error:

La expresión de propiedades ''c => new <> f__AnonymousType0`5 (colID = c.DinnerID, colTitle = c.Title, colHost = c.HostedBy, colDate = c.EventDate, colAddress = c.Address)'' no es válida. La expresión debe representar una propiedad: C #: ''t => t.MyProperty'' VB.Net: ''Función (t) t.MyProperty''. Al especificar propiedades múltiples, use un tipo anónimo: C #: ''t => new {t.MyProperty1, t.MyProperty2}'' VB.Net: ''Función (t) Nuevo desde {t.MyProperty1, t.MyProperty2}''.

¿Cuál es la sintaxis correcta para mapear las columnas?

Puntos de bonificación si me permite saber cómo asignar la Propiedad de dirección en una subclase llamada Dirección:

public class Address { City State Zip, etc }



Creo que solo tienes que hacer

modelBuilder.Entity<Dinner>().Property(x => x.HostedBy).HasColumnName("colHost");

para todas sus columnas, desea que los nombres de las columnas db se denominen de forma diferente a sus nombres de propiedad.

Editar: Después de buscar un poco más, me encontré con esta pregunta . A juzgar por eso y por el error que publicó, parece que mc.Properties() es más para dividir los valores en diferentes tablas, no para cambiar el nombre de esos nombres de tablas. Creo que el cambio de nombre todavía tendrá que hacerse de forma manual.

Esta es otra vez información de Google y no tengo idea si me falta una pieza para hacer exactamente lo que quieres :).