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?
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
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; }
}
Ab EF 5.0 müssen Sie das System.ComponentModel.DataAnnotations.Schema
Namespace.