Ignorar una propiedad de clase en Entity Framework 4.1 Code First


Entiendo que el atributo [NotMapped] no está disponible hasta EF 5, que está actualmente en CTP, por lo que no podemos usarlo en producción.

¿Cómo puedo marcar propiedades en EF 4.1 para ser ignoradas?

ACTUALIZACIÓN: Me di cuenta de algo más extraño. Tengo el atributo [NotMapped] para trabajar, pero por alguna razón, EF 4.1 todavía crea una columna llamada Disposed en la base de datos a pesar de que el public bool Disposed { get; private set; } está marcado con [NotMapped]. La clase implementa IDisposeable por supuesto, pero no veo cómo debería asunto. ¿Alguna idea?

Author: SharpC, 2012-04-30

2 answers

Puede usar la anotación de datos del atributo NotMapped para indicar 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 espacio de nombres System.ComponentModel.DataAnnotations.

Puede hacer esto alternativamente con Fluent API sobreescribiendo la función OnModelCreating en su clase DBContext:

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 he comprobado es EF 4.3, que es la última versión estable disponible cuando se utiliza NuGet.


Editar : SEP 2017

Asp.NET Básica (2,0)

Anotación de datos

Si está utilizando asp.net core ( 2.0 en el momento de escribir esto), el atributo [NotMapped] se puede usar 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; }
}

Fluent API

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; }
}
 515
Author: Shyju,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-30 17:20:45

A partir de EF 5.0, debe incluir el espacio de nombres System.ComponentModel.DataAnnotations.Schema.

 32
Author: Shane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-27 16:53:48