Ignorar uma propriedade de classe na estrutura da entidade 4.1 Código primeiro

o meu entendimento é que o atributo {[[0]} não está disponível até EF 5, que está actualmente no CTP, pelo que não podemos usá-lo na produção.

Como posso marcar propriedades EM EF 4.1 para serem ignoradas?

atualização: notei outra coisa estranha. Consegui que o atributo {[[0]} funcionasse, mas por alguma razão, o EF 4.1 ainda cria uma coluna chamada Disposed na base de dados, mesmo que o public bool Disposed { get; private set; } esteja marcado com [NotMapped]. A classe implementa [[4]] claro, mas não vejo como isso deve importar. Alguma ideia?

Author: SharpC, 2012-04-30

2 answers

Pode usar a anotação de dados dos atributos NotMapped para indicar o Código-primeiro para excluir uma propriedade em 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] o atributo está incluído no espaço de nomes System.ComponentModel.DataAnnotations.

Pode, em alternativa, fazê - lo com Fluent API a sobrepor a função OnModelCreating na sua classe 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

A versão que eu verifiquei é EF 4.3, que é a última versão estável disponível quando você usa NuGet.


Editar : set 2017

Asp.NET Principal (2.0)

Anotação dos Dados

Se estiver a utilizar asp.net core (2.0 no momento da escrita ), o atributo [NotMapped] pode ser usado no nível da propriedade.

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 Fluente

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, 2017-09-30 17:20:45

A partir de EF 5.0, você precisa incluir o espaço de nomes System.ComponentModel.DataAnnotations.Schema.

 32
Author: Shane, 2013-06-27 16:53:48