J'ai une classe Product
et un type complexe AddressDetails
public class Product
{
public Guid Id { get; set; }
public AddressDetails AddressDetails { get; set; }
}
public class AddressDetails
{
public string City { get; set; }
public string Country { get; set; }
// other properties
}
Est-il possible d'empêcher le mappage de la propriété "Pays" de AddressDetails
dans la classe Product
? (parce que je n'en aurai jamais besoin pour la classe Product
)
Quelque chose comme ça
Property(p => p.AddressDetails.Country).Ignore();
Pour EF5 et plus ancien: Dans le DbContext.OnModelCreating
, remplacez pour votre contexte:
modelBuilder.Entity<Product>().Ignore(p => p.AddressDetails.Country);
Pour EF6: Vous n'avez pas de chance. Voir Réponse de Mrchief .
Malheureusement, la réponse acceptée ne fonctionne pas, pas du moins avec EF6 et surtout si la classe enfant n'est pas une entité.
Je n'ai trouvé aucun moyen de le faire via une API fluide. Cela fonctionne uniquement via des annotations de données:
public class AddressDetails
{
public string City { get; set; }
[NotMapped]
public string Country { get; set; }
// other properties
}
Remarque: Si vous avez une situation dans laquelle Country
ne devrait être exclu que si elle fait partie d'une autre entité, vous n'avez pas de chance avec cette approche.
Si vous utilisez une implémentation de EntityTypeConfiguration, vous pouvez utiliser la méthode Ignore:
public class SubscriptionMap: EntityTypeConfiguration<Subscription>
{
// Primary Key
HasKey(p => p.Id)
Property(p => p.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Property(p => p.SubscriptionNumber).IsOptional().HasMaxLength(20);
...
...
Ignore(p => p.SubscriberSignature);
ToTable("Subscriptions");
}
Bien que je sache que c’est une vieille question, les réponses n’ont pas résolu mon problème avec EF 6.
Pour EF 6, vous devez créer un mappage ComplexTypeConfiguration.
exemple:
public class Workload
{
public int Id { get; set; }
public int ContractId { get; set; }
public WorkloadStatus Status {get; set; }
public Configruation Configuration { get; set; }
}
public class Configuration
{
public int Timeout { get; set; }
public bool SaveResults { get; set; }
public int UnmappedProperty { get; set; }
}
public class WorkloadMap : System.Data.Entity.ModelConfiguration.EntityTypeConfiguration<Workload>
{
public WorkloadMap()
{
ToTable("Workload");
HasKey(x => x.Id);
}
}
// Here This is where we mange the Configuration
public class ConfigurationMap : ComplexTypeConfiguration<Configuration>
{
ConfigurationMap()
{
Property(x => x.TimeOut).HasColumnName("TimeOut");
Ignore(x => x.UnmappedProperty);
}
}
Si votre contexte charge des configurations manuellement, vous devez ajouter le nouveau ComplexMap. Si vous utilisez la surcharge FromAssembly, il sera repris avec le reste des objets de configuration.
Sur EF6, vous pouvez configurer le type de complexe:
modelBuilder.Types<AddressDetails>()
.Configure(c => c.Ignore(p => p.Country))
De cette façon, la propriété Pays sera toujours ignorée.
Essaye ça
modelBuilder.ComplexType<AddressDetails>().Ignore(p => p.Country);
Cela a fonctionné pour moi dans un cas similaire.