entity-framework ef-code-first entity-framework-4.1

Código Entity Framework primeras propiedades computadas



entity-framework ef-code-first (2)

Hay un par de otras opciones también.

Lo primero es cambiar la configuración de la propiedad en el archivo de mapeo desde:

this.Property(t => t.Name) .HasMaxLength(152);

a:

this.Property(t => t.Name) .HasMaxLength(152) .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);

Esto es casi lo mismo que la solución de Same Huggill, excepto que mantiene esta configuración en la asignación, en lugar de en el modelo. Creo que esto es un poco mejor ya que la clase de mapeo ya contiene código para decirle a Entity Framework cómo cargar ese tipo de entidad, por lo que el conocimiento de que se calcula un campo pertenece allí.

Otra opción es el NotMappedAttribute que se puede aplicar a propiedades individuales de una entidad, como:

public class User { ... [NotMapped] public string Name { get; set; } ... }

Esto es útil para cuando la entidad contiene propiedades que no están pobladas desde la base de datos, pero debería ser igualmente útil en el escenario que enfrenta OP, es decir, EF no intentará NotMappedAttribute el valor en una propiedad marcada con el NotMappedAttribute , por lo tanto, inserte Deberia trabajar.

Estoy usando el enfoque de "Entorno Primero" de Entity Framework en una aplicación web ASP.NET MVC 3. En mi base de datos tengo varias columnas computadas. Necesito usar estas columnas para mostrar datos (lo que funciona bien).

Sin embargo, cuando llego a insertar filas en esta tabla, aparece el siguiente error:

La columna "ChargePointText" no se puede modificar porque es una columna calculada o es el resultado de un operador UNION.

¿Hay alguna forma de marcar la propiedad como de solo lectura en mi clase?

public class Tariff { public int TariffId { get; set; } public int Seq { get; set; } public int TariffType { get; set; } public int TariffValue { get; set; } public string Title { get; set; } public string Description { get; set; } public int ChargePoint { get; set; } public string ChargePointText { get; set; } }


He encontrado la solución. Entity Framework proporciona una anotación de datos llamada DatabaseGenerated. Úsalo así:

[DatabaseGenerated(DatabaseGeneratedOption.Computed)] public string ChargePointText { get; set; }

Obtenga más detalles aquí: http://msdn.microsoft.com/en-us/library/gg193958.aspx