Si j'ai bien compris, l'attribut [NotMapped]
n'est pas disponible avant l'EF 5 actuellement en CTP, nous ne pouvons donc pas l'utiliser en production.
Comment puis-je marquer les propriétés dans EF 4.1 pour les ignorer?
PDATE: J'ai remarqué quelque chose d'autre d'étrange. L'attribut [NotMapped]
a fonctionné, mais pour une raison quelconque, EF 4.1 crée toujours une colonne nommée Disposed dans la base de données, même si le public bool Disposed { get; private set; }
est marqué de [NotMapped]
. La classe implémente IDisposeable
bien sûr, mais je ne vois pas en quoi cela devrait avoir de l'importance. Des pensées?
Vous pouvez utiliser l'annotation de données d'attribut NotMapped
pour demander à Code-First d'exclure une propriété particulière.
public class Customer
{
public int CustomerID { set; get; }
public string FirstName { set; get; }
public string LastName{ set; get; }
[NotMapped]
public int Age { set; get; }
}
L'attribut [NotMapped]
est inclus dans l'espace System.ComponentModel.DataAnnotations
names.
Vous pouvez également le faire avec Fluent API
annulant la fonction OnModelCreating
dans votre 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 version que j'ai vérifiée est EF 4.3
, qui est la dernière version stable disponible lorsque vous utilisez NuGet.
Modifier : SEP 2017
Annotation de données
Si vous utilisez asp.net core ( 2.0 au moment de l'écriture ), l'attribut [NotMapped]
peut être utilisé au niveau de la propriété.
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 fluide
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 partir de EF 5.0, vous devez inclure l'espace de noms System.ComponentModel.DataAnnotations.Schema
.