it-swarm.com.de

Ignorieren einer Klasseneigenschaft in Entity Framework 4.1 Code First

Mein Verständnis ist, dass die [NotMapped] -Attribut ist erst verfügbar, wenn EF 5 zurzeit in CTP ist, sodass wir es nicht in der Produktion verwenden können.

Wie kann ich Eigenschaften in EF 4.1 markieren, die ignoriert werden sollen?

PDATE: Mir ist noch etwas Merkwürdiges aufgefallen. Ich habe das [NotMapped]-Attribut funktioniert, aber aus irgendeinem Grund erstellt EF 4.1 immer noch eine Spalte mit dem Namen Disposed in der Datenbank, obwohl das public bool Disposed { get; private set; } ist markiert mit [NotMapped]. Die Klasse implementiert natürlich IDisposeable, aber ich sehe nicht ein, wie wichtig das sein soll. Irgendwelche Gedanken?

286
Raheel Khan

Sie können die Attributdatenanmerkung NotMapped verwenden, um Code-First anzuweisen, eine bestimmte Eigenschaft auszuschließen

public class Customer
{
    public int CustomerID { set; get; }
    public string FirstName { set; get; } 
    public string LastName{ set; get; } 
    [NotMapped]
    public int Age { set; get; }
}

Das Attribut [NotMapped] Ist im Namespace System.ComponentModel.DataAnnotations Enthalten.

Alternativ können Sie dies tun, indem Sie Fluent API Die OnModelCreating -Funktion in Ihrer DBContext -Klasse überschreiben:

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

Die Version, die ich überprüft habe, ist EF 4.3. Dies ist die neueste stabile Version, die verfügbar ist, wenn Sie NuGet verwenden.


Bearbeiten : SEP 2017

Asp.NET Core (2.0)

Datenanmerkung

Wenn Sie asp.net core verwenden ( 2.0 zum Zeitpunkt des Schreibens), kann das Attribut [NotMapped] Auf der Eigenschaftsebene verwendet werden.

public class Customer
{
    public int Id { set; get; }
    public string FirstName { set; get; } 
    public string LastName { set; get; } 
    [NotMapped]
    public int FullName { set; get; }
}

Fließende 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; }
}
564
Shyju

Ab EF 5.0 müssen Sie das System.ComponentModel.DataAnnotations.Schema Namespace.

33
Shane