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
}
¿Qué hay de usar DataAnnotations?
[Key]
[Column("ColID", TypeName="int")]
public int DinnerID { get; set; }
Puede encontrar una lista completa con ejemplos en http://msdn.microsoft.com/en-us/data/gg193958
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 :).