c# - tph - table per hierarchy entity framework code first




Ignorare una proprietà di classe in Entity Framework 4.1 Code First (2)

La mia comprensione è che l'attributo [NotMapped] non è disponibile fino [NotMapped] 5 che è attualmente in CTP, quindi non possiamo utilizzarlo in produzione.

Come posso contrassegnare le proprietà in EF 4.1 per essere ignorate?

AGGIORNAMENTO: ho notato qualcos'altro di strano. Ho ottenuto l'attributo [NotMapped] per funzionare ma, per qualche ragione, EF 4.1 crea ancora una colonna denominata Disposed nel database anche se il public bool Disposed { get; private set; } public bool Disposed { get; private set; } public bool Disposed { get; private set; } è contrassegnato con [NotMapped] . IDisposeable classe implementa l' IDisposeable , ma non vedo come dovrebbe essere importante. qualche idea?


È possibile utilizzare l'annotazione dei dati degli attributi NotMapped per istruire Code-First ad escludere una particolare proprietà

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] attributo [NotMapped] è incluso nello spazio System.ComponentModel.DataAnnotations nomi System.ComponentModel.DataAnnotations .

In alternativa, puoi farlo con l' Fluent API sostituisce la funzione OnModelCreating nella 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

La versione che ho controllato è EF 4.3 , che è l'ultima versione stabile disponibile quando si utilizza NuGet.

Modifica : SEP 2017

Asp.NET Core (2.0)

Annotazione dati

Se si utilizza il nucleo di asp.net ( 2.0 al momento della stesura di questo documento ), l'attributo [NotMapped] può essere utilizzato a livello di proprietà.

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

A partire da EF 5.0, è necessario includere lo spazio System.ComponentModel.DataAnnotations.Schema nomi System.ComponentModel.DataAnnotations.Schema .





entity-framework-4.1