IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Erreur en mode Release mais pas en mode Debug


Sujet :

C#

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2010
    Messages : 185
    Points : 167
    Points
    167
    Par défaut Erreur en mode Release mais pas en mode Debug
    Bonjour,
    J'ai un soucis d'exécution de code, en mode Debug, ça fonctionne très bien et en mode Release non.

    Détails techniques :
    VS2019
    .Net Framework 4.8
    C# 8.0
    EFCore 3.1.22

    Quand je suis en mode Release, j'ai ce message d'erreur :
    System.InvalidOperationException
    HResult=0x80131509
    Message=Unable to determine the relationship represented by navigation property 'MonParent.MaCollectionDEnfants' of type 'ICollection<MonEnfant>'. Either manually configure the relationship, or ignore this property using the '[NotMapped]' attribute or by using 'EntityTypeBuilder.Ignore' in 'OnModelCreating'.
    Source=Microsoft.EntityFrameworkCore
    Arborescence des appels de procédure*:
    à Microsoft.EntityFrameworkCore.Infrastructure.ModelValidator.ValidatePropertyMapping(IModel model, IDiagnosticsLogger`1 logger)
    à Microsoft.EntityFrameworkCore.Infrastructure.ModelValidator.Validate(IModel model, IDiagnosticsLogger`1 logger)
    à Microsoft.EntityFrameworkCore.Infrastructure.RelationalModelValidator.Validate(IModel model, IDiagnosticsLogger`1 logger)
    à Microsoft.EntityFrameworkCore.SqlServer.Internal.SqlServerModelValidator.Validate(IModel model, IDiagnosticsLogger`1 logger)
    à Microsoft.EntityFrameworkCore.Metadata.Conventions.ValidatingConvention.ProcessModelFinalized(IConventionModelBuilder modelBuilder, IConventionContext`1 context)
    à Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.ImmediateConventionScope.OnModelFinalized(IConventionModelBuilder modelBuilder)
    à Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.OnModelFinalized(IConventionModelBuilder modelBuilder)
    à Microsoft.EntityFrameworkCore.Metadata.Internal.Model.FinalizeModel()
    à Microsoft.EntityFrameworkCore.ModelBuilder.FinalizeModel()
    à Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.CreateModel(DbContext context, IConventionSetBuilder conventionSetBuilder)
    à Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.GetModel(DbContext context, IConventionSetBuilder conventionSetBuilder)
    à Microsoft.EntityFrameworkCore.Internal.DbContextServices.CreateModel()
    à Microsoft.EntityFrameworkCore.Internal.DbContextServices.get_Model()
    à Microsoft.EntityFrameworkCore.Infrastructure.EntityFrameworkServicesBuilder.<>c.<TryAddCoreServices>b__7_3(IServiceProvider p)
    à Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitFactory(FactoryCallSite factoryCallSite, RuntimeResolverContext context)
    à Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
    à Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
    à Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite singletonCallSite, RuntimeResolverContext context)
    à Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
    à Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
    à Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
    à Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
    à Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite singletonCallSite, RuntimeResolverContext context)
    à Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
    à Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope)
    à Microsoft.Extensions.DependencyInjection.ServiceLookup.DynamicServiceProviderEngine.<>c__DisplayClass1_0.<RealizeService>b__0(ServiceProviderEngineScope scope)
    à Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)
    à Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType)
    à Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
    à Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
    à Microsoft.EntityFrameworkCore.DbContext.get_DbContextDependencies()
    à Microsoft.EntityFrameworkCore.DbContext.get_InternalServiceProvider()
    à Microsoft.EntityFrameworkCore.DbContext.get_ChangeTracker()
    à BusinessDALInit.Program.Main(String[] args)
    Voici une simplification de la déclaration de mes objets
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
        public class MonParent
        {
            [Key]
            [Description("Identifiant interne à la base de données")]
            public int ID { get; set; }
     
            public virtual ICollection<MonEnfant> ParentDeMesEnfants { get; set; } = new HashSet<MonEnfant>();
     
            public virtual ICollection<MonEnfant> EnfantsDeMesParents { get; set; } = new HashSet<MonEnfant>();
        }
     
        public class MonEnfant
        {
            [Description("Identifiant du premier parent")]
            public int MonParent1ID { get; set; }
            public MonParent MonParent1{ get; set; }
     
            [Description("Identifiant du second parent")]
            public int MonParent2ID { get; set; }
            public MonParent MonParent2{ get; set; }
        }
     
        public class MonDbContext : DbContext
        {
            public virtual DbSet<MonParent> MonParents { get; set; }
            public virtual DbSet<MonEnfant> MonEnfants { get; set; }
     
            protected override void OnModelCreating(ModelBuilder modelBuilder)
            {
                modelBuilder.Entity<MonEnfant>()
                    .HasAlternateKey(o => new { o.MonParent1ID, o.MonParent2ID });
            }
        }

    Néanmoins, ça fonctionne en mode Debug mais lorsque je passe en mode Release, ça plante

    Une idée du pourquoi et surtout pourquoi cette différence ?

    Merci

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2010
    Messages : 185
    Points : 167
    Points
    167
    Par défaut
    Bonsoir,
    Bon, après un peu de recherches, j'ai finalement trouvé une solution à mon problème par l'ajout d'un attribut : InverseProperty.

    Le code devient donc
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
        public class MonParent
        {
            [Key]
            [Description("Identifiant interne à la base de données")]
            public int ID { get; set; }
     
            [InverseProperty(nameof(MonEnfant.MonParent1))]
            public virtual ICollection<MonEnfant> ParentDeMesEnfants { get; set; } = new HashSet<MonEnfant>();
     
            [InverseProperty(nameof(MonEnfant.MonParent2))]
            public virtual ICollection<MonEnfant> EnfantsDeMesParents { get; set; } = new HashSet<MonEnfant>();
        }
     
        public class MonEnfant
        {
            [Description("Identifiant du premier parent")]
            public int MonParent1ID { get; set; }
            public MonParent MonParent1{ get; set; }
     
            [Description("Identifiant du second parent")]
            public int MonParent2ID { get; set; }
            public MonParent MonParent2{ get; set; }
        }
     
        public class MonDbContext : DbContext
        {
            public virtual DbSet<MonParent> MonParents { get; set; }
            public virtual DbSet<MonEnfant> MonEnfants { get; set; }
     
            protected override void OnModelCreating(ModelBuilder modelBuilder)
            {
                modelBuilder.Entity<MonEnfant>()
                    .HasAlternateKey(o => new { o.MonParent1ID, o.MonParent2ID });
            }
        }

    Par contre, pourquoi cela fonctionnait sans en mode Debug et pas en Release ???

    MAIS, quand un problème est réglé, un autre survient !!!

    Dans 2 autres classes, j'ai un lien 1-1 entre les 2 qui ne fonctionne pas non plus lorsque j'exécute l'application en mode Release. En mode Debug, c'est toujours bon.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
        public class MaClasse1
        {
            [Key]
            [Description("Identifiant interne à la base de données")]
            public int ID { get; set; }
     
            [Description("Identifiant interne à la base de données")]
            public int MaClasse2ID { get; set; }
            public virtual MaClasse2 MaClasse2 { get; set; }
        }
     
        public class MaCalesse2
        {
            [Key]
            [Description("Identifiant interne à la base de données")]
            public int ID { get; set; }
     
            [Description("Identifiant interne à la base de données")]
            public int MaClasse1ID { get; set; }
            public virtual MaClasse1 MaClasse1 { get; set; }
        }
     
        public class MonDbContext : DbContext
        {
            public virtual DbSet<MaClasse1> MaClasse1s { get; set; }
            public virtual DbSet<MaClasse2> MaClasse2s { get; set; }
     
            protected override void OnModelCreating(ModelBuilder modelBuilder)
            {
                modelBuilder.Entity<MaClasse1>()
                    .HasOne(o => o.MaClasse2)
                    .WithOne(o => o.MaClasse1)
                    .HasForeignKey<MaClasse2>(o => o.MaClasse1ID);
            }
        }
    Ici, le message d'erreur est le suivant :
    Exception non gérée*: System.InvalidOperationException: The child/dependent side could not be determined for the one-to-one relationship between 'MaClasse1.MaClasse2' and 'MaClasse2.MaClasse1'. To identify the child/dependent side of the relationship, configure the foreign key property. If these navigations should not be part of the same relationship configure them without specifying the inverse. See http://go.microsoft.com/fwlink/?LinkId=724062 for more details.
    à Microsoft.EntityFrameworkCore.Infrastructure.ModelValidator.ValidateRelationships(IModel model, IDiagnosticsLogger`1 logger)
    à Microsoft.EntityFrameworkCore.Infrastructure.ModelValidator.Validate(IModel model, IDiagnosticsLogger`1 logger)
    à Microsoft.EntityFrameworkCore.Infrastructure.RelationalModelValidator.Validate(IModel model, IDiagnosticsLogger`1 logger)
    à Microsoft.EntityFrameworkCore.SqlServer.Internal.SqlServerModelValidator.Validate(IModel model, IDiagnosticsLogger`1 logger)
    à Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.ImmediateConventionScope.OnModelFinalized(IConventionModelBuilder modelBuilder)
    à Microsoft.EntityFrameworkCore.Metadata.Internal.Model.FinalizeModel()
    à Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.GetModel(DbContext context, IConventionSetBuilder conventionSetBuilder)
    à Microsoft.EntityFrameworkCore.Internal.DbContextServices.CreateModel()
    à Microsoft.EntityFrameworkCore.Internal.DbContextServices.get_Model()
    à Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitFactory(FactoryCallSite factoryCallSite, RuntimeResolverContext context)
    à Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
    à Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
    à Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite singletonCallSite, RuntimeResolverContext context)
    à Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
    à Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
    à Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
    à Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
    à Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite singletonCallSite, RuntimeResolverContext context)
    à Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
    à Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope)
    à Microsoft.Extensions.DependencyInjection.ServiceLookup.DynamicServiceProviderEngine.<>c__DisplayClass1_0.<RealizeService>b__0(ServiceProviderEngineScope scope)
    à Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
    à Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
    à Microsoft.EntityFrameworkCore.DbContext.get_DbContextDependencies()
    à Microsoft.EntityFrameworkCore.DbContext.get_InternalServiceProvider()
    à Microsoft.EntityFrameworkCore.DbContext.get_ChangeTracker()
    à MonProgramme.Program.Main(String[] args)
    Encore une fois, en mode Debug, aucun problème, et mode Release ça ne fonctionne pas...

    Auriez-vous déjà rencontré ça et surtout comment l'avez-vous réglé ?

    Merci

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2010
    Messages : 185
    Points : 167
    Points
    167
    Par défaut
    Ca y est, j'ai trouvé la source du problème, dû à une organisation interne au projet.

    Merci de m'avoir lu et peut-être d'avoir cherché de votre côté.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. CSplitterWnd cose une erreur en mode debug
    Par nemo31 dans le forum MFC
    Réponses: 0
    Dernier message: 09/02/2010, 13h57
  2. [JpGraph] erreur 404 en ligne mais pas en local
    Par Lert Sarin dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 24/07/2009, 10h45
  3. Problème d'exécution en release mais pas en debug (2)
    Par animageo dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 15/11/2007, 14h22
  4. Problème Exécution en Release mais pas en Debug
    Par nono27200 dans le forum VB 6 et antérieur
    Réponses: 67
    Dernier message: 08/11/2007, 16h55
  5. Erreur sur un poste mais pas sur un autre
    Par hawk² dans le forum Framework .NET
    Réponses: 10
    Dernier message: 27/08/2007, 09h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo