Exception concernant la clé étrangère

c# entity-framework foreign-keys xamlparseexception

Question

Voici l'exception interne:

InnerException: System.Data.UpdateException
Message=Entities in 'OrganizerDBEntities.Assignments' participate in 
the 'CourseId' relationship. 0 related 'Course' were found. 
1 'Course' is expected.`  

J'ai trois tables (dossier, affectation, cours). La table Assignment a une clé primaire appelée AssignmentId et une clé étrangère appelée CourseId dont la propriété 'Allow Nulls' a été définie sur true. Donc, cette exception m'empêche d'appeler _entities.SaveChanges (); et me empêchant ainsi d'ajouter des données à la base de données.


UPDATE: Merci à Marc, ce problème a été résolu, mais un autre problème est survenu:

 InnerException: System.Data.UpdateException
        Message=An error occurred while updating the entries. See the InnerException for details.
        Source=System.Data.Entity
        StackTrace:
             at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
             at System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache)
             at System.Data.Objects.ObjectContext.SaveChanges(Boolean acceptChangesDuringSave)
             at System.Data.Objects.ObjectContext.SaveChanges()
             at AssignmentOrganizer.App_Data.AssignmentRepository.CreateAssignment(Assignment assignmentToCreate) in C:\Users\Mohit\Documents\Visual Studio 2010\Projects\AssignmentOrganizer\AssignmentOrganizer\App_Data\AssignmentRepository.cs:line 19
             at AssignmentOrganizer.MainWindow..ctor() in C:\Users\Mohit\Documents\Visual Studio 2010\Projects\AssignmentOrganizer\AssignmentOrganizer\MainWindow.xaml.cs:line 54
        InnerException: System.Data.EntityCommandCompilationException
             Message=An error occurred while preparing the command definition. See the inner exception for details.
             Source=System.Data.Entity
             StackTrace:
                  at System.Data.Mapping.Update.Internal.UpdateTranslator.CreateCommand(DbModificationCommandTree commandTree)
                  at System.Data.Mapping.Update.Internal.DynamicUpdateCommand.CreateCommand(UpdateTranslator translator, Dictionary`2 identifierValues)
                  at System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary`2 identifierValues, List`1 generatedValues)
                  at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
             InnerException: System.NotSupportedException
                  Message=Server-generated keys and server-generated values are not supported by SQL Server Compact.
                  Source=System.Data.SqlServerCe.Entity
                  StackTrace:
                       at System.Data.SqlServerCe.SqlGen.DmlSqlGenerator.GenerateReturningSql(StringBuilder commandText, DbModificationCommandTree tree, ExpressionTranslator translator, DbExpression returning)
                       at System.Data.SqlServerCe.SqlGen.DmlSqlGenerator.GenerateInsertSql(DbInsertCommandTree tree, List`1& parameters, Boolean isLocalProvider)
                       at System.Data.SqlServerCe.SqlGen.SqlGenerator.GenerateSql(DbCommandTree tree, List`1& parameters, CommandType& commandType, Boolean isLocalProvider)
                       at System.Data.SqlServerCe.SqlCeProviderServices.CreateCommand(DbProviderManifest providerManifest, DbCommandTree commandTree)
                       at System.Data.SqlServerCe.SqlCeProviderServices.CreateDbCommandDefinition(DbProviderManifest providerManifest, DbCommandTree commandTree)
                       at System.Data.Common.DbProviderServices.CreateCommandDefinition(DbCommandTree commandTree)
                       at System.Data.Common.DbProviderServices.CreateCommand(DbCommandTree commandTree)
                       at System.Data.Mapping.Update.Internal.UpdateTranslator.CreateCommand(DbModificationCommandTree commandTree)
                  InnerException: 

Réponse acceptée

La première chose que je voudrais vérifier est l'association OrganizerDBEntities.Assignments dans votre modèle conceptuel EF. Permet-il des relations 0: n? D'après le message d'erreur, je suis amené à croire que ce n'est pas le cas. Vous pouvez modifier la cardinalité (les valeurs minimales et maximales possibles) dans votre modèle EF.

Si vous sélectionnez une association entre deux entités dans la surface de votre concepteur EDMX, la fenêtre de propriétés affiche les deux extrémités de l'association. Dans chacune de ces propriétés "End", une valeur "Multiplicité" définit la cardinalité de l'association: 0:* , 0..1:* , 1:* , etc.

Si vous souhaitez autoriser une valeur manquante, la multiplicité de l'extrémité enfant de votre association doit être 0..1 (zéro ou un) - est-ce vraiment 0..1 (zéro ou un)? Ou est-il réglé sur 1 à la place?


Réponse populaire

Voici mes 2 cents.
J'évite simplement de définir des valeurs de clé étrangère sur NULL.So, au lieu de définir CourseId en tant que clé étrangère dans la table Assignment, définissez AssignmentId en tant que clé étrangère dans une table de cours.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow