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?
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; }
}
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
.
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