Comment créer des propriétés non persistantes à l'aide de codefirst EF4?
MS dit qu'il y a un attribut StoreIgnore, mais je ne le trouve pas.
Existe-t-il un moyen de le configurer en utilisant EntityConfiguration?
Dans EF Code-First CTP5, vous pouvez utiliser l'annotation [NotMapped]
.
using System.ComponentModel.DataAnnotations;
public class Song
{
public int Id { get; set; }
public string Title { get; set; }
[NotMapped]
public int Track { get; set; }
Actuellement, je connais deux façons de le faire.
Ajoutez le mot clé 'dynamic' à la propriété, ce qui empêche le mappeur de la conserver:
private Gender gender;
public dynamic Gender
{
get { return gender; }
set { gender = value; }
}
Remplacez OnModelCreating dans DBContext et remappez le type entier, en omettant les propriétés que vous ne souhaitez pas conserver:
protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Person>().MapSingleType(p => new { p.FirstName, ... });
}
En utilisant la méthode 2, si l'équipe EF introduit Ignore, vous pourrez facilement changer le code en:
modelBuilder.Entity<Person>().Property(p => p.IgnoreThis).Ignore();
Je ne suis pas sûr que ce soit encore disponible.
Sur cette page MSDN l'attribut Ignore et l'API sont décrits, mais ci-dessous, dans les commentaires, quelqu'un écrit le 4 juin 2010:
Vous pourrez ignorer les propriétés dans la prochaine version de Code First,
Si vous ne souhaitez pas utiliser les annotations, vous pouvez utiliser le API Fluent . Remplacez la OnModelCreating
et utilisez la méthode Ignore()
de DbModelBuilder. En supposant que vous ayez une entité 'Song':
public class MyContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Song>().Ignore(p => p.PropToIgnore);
}
}
Vous pouvez également utiliser EntityTypeConfiguration pour déplacer les configurations dans des classes séparées pour une meilleure gestion:
public class MyContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new SongConfiguration());
}
}
public class SongConfiguration : EntityTypeConfiguration<Song>
{
public SongConfiguration()
{
Ignore(p => p.PropToIgnore);
}
}
Ajoutez À l'aide de System.ComponentModel.DataAnnotations. Schema À la classe de modèle. (Doit inclure "SCHEMA")
Ajoutez des annotations de données [Non mappées] au (x) champ (s) que vous voulez empêcher de persister (c'est-à-dire, ne pas enregistrer dans la base de données).
Cela évitera leur ajout en tant que colonne à la table de la base de données.
Remarque: les réponses précédentes ont peut-être inclus ces bits, mais ils ne contenaient pas l'intégralité de la clause "using". Ils ont simplement laissé de côté "schéma" - sous lequel l'attribut NotMapped est défini.