Ignorar una propiedad de clase en Entity Framework 4.1 Code First

Resuelto Raheel Khan asked hace 12 años • 2 respuestas

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, IDisposeablepor supuesto, pero no veo cómo eso debería importar. ¿Alguna idea?

Raheel Khan avatar Apr 30 '12 21:04 Raheel Khan
Aceptado

Puede utilizar la NotMappedanotació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 APIprimordial OnModelCreatingen tu DBContextclase:

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; }
}
Shyju avatar Apr 30 '2012 14:04 Shyju

A partir de EF 5.0, es necesario incluir el System.ComponentModel.DataAnnotations.Schemaespacio de nombres.

Shanerk avatar Jun 27 '2013 16:06 Shanerk