Ignorar una propiedad de clase en Entity Framework 4.1 Code First
Tengo entendido que el [NotMapped]
atributo no está disponible hasta EF 5, que actualmente se encuentra en CTP, por lo que no podemos usarlo en producción.
¿Cómo puedo marcar propiedades en EF 4.1 para ignorarlas?
ACTUALIZACIÓN: Noté algo más extraño. Conseguí que el [NotMapped]
atributo funcionara, pero por alguna razón, EF 4.1 todavía crea una columna denominada Disposed en la base de datos aunque esté public bool Disposed { get; private set; }
marcada con [NotMapped]
. La clase implementa, IDisposeable
por supuesto, pero no veo cómo eso debería importar. ¿Alguna idea?
Puede utilizar la NotMapped
anotación de datos de atributos para indicarle a Code-First que excluya una propiedad en particular.
public class Customer
{
public int CustomerID { set; get; }
public string FirstName { set; get; }
public string LastName{ set; get; }
[NotMapped]
public int Age { set; get; }
}
[NotMapped]
El atributo está incluido en el System.ComponentModel.DataAnnotations
espacio de nombres.
Alternativamente, puedes hacer esto con una función Fluent API
primordial OnModelCreating
en tu DBContext
clase:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Customer>().Ignore(t => t.LastName);
base.OnModelCreating(modelBuilder);
}
http://msdn.microsoft.com/en-us/library/hh295847(v=vs.103).aspx
La versión que verifiqué es EF 4.3
, que es la última versión estable disponible cuando usas NuGet.
Editar : SEPTIEMBRE 2017
Asp.NET Core(2.0)
Anotación de datos
Si está utilizando asp.net core ( 2.0 en el momento de escribir este artículo ), el [NotMapped]
atributo se puede utilizar en el nivel de propiedad.
public class Customer
{
public int Id { set; get; }
public string FirstName { set; get; }
public string LastName { set; get; }
[NotMapped]
public int FullName { set; get; }
}
API fluida
public class SchoolContext : DbContext
{
public SchoolContext(DbContextOptions<SchoolContext> options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Customer>().Ignore(t => t.FullName);
base.OnModelCreating(modelBuilder);
}
public DbSet<Customer> Customers { get; set; }
}
A partir de EF 5.0, es necesario incluir el System.ComponentModel.DataAnnotations.Schema
espacio de nombres.