none
[MVC / Entity Framework] La séquence contient plusieurs éléments correspondants. RRS feed

  • Question

  • Bonjour tout le monde,

    Sur un projet MVC Code First où les migrations sont initialisées (Enable-Migrations), je viens de taper dans la console du gestionnaire de package "update-database", et après un temps d'exécution il m'a été répondu en rouge :

    La séquence contient plusieurs éléments correspondants.

    Dois-je m'en inquiéter ?

    Google n'a que deux réponses là-dessus, ce qui est assez rare pour être signalé. Si j'arrive à établir un peu une analogie, ce que ce message pourrait suggérer est que le fichier de base de données SQL Server dans le répertoire App-Data fait l'objet d'une attache dans le serveur SQL Express, et qu'il y a donc deux moyens d'y parvenir. J'ai toutefois un doute en ce sens que c'est la première fois que je vois ce message alors que je travaille sur ce projet depuis un moment (avec une interruption depuis une semaine à cause semble-t-il d'un problème système).

    J'affiche sans problème les données depuis l'explorateur de bases de données.

    Cela appelle-t-il un commentaire ?


    • Modifié Gloops lundi 28 juillet 2014 16:26
    lundi 28 juillet 2014 16:17

Toutes les réponses

  • Bonjour,

    La migration de la base de donnée as-t elle eu lieu ?

    - Si non, pouvez-vous lancer le 'upgrade-database' en verbeux et nous donner le résultat de la console S.V.P ?

    Update-database -Verbose

    - Si oui, celle après d'autres migrations ?

    Cordialement,



    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.

    lundi 28 juillet 2014 19:46
  • Bonjour,

    Pour parler franchement, au bout d'une semaine je me rappelais que j'avais des migrations en attente, mais je ne me rappelais pas lesquelles.

    Habituellement, si je lance update-database alors que ça a déjà été fait, il m'est répondu pas de modification en attente, ou quelque chose du style.

    J'ai lancé ça en verbeux, ça m'a répondu ça :

    PM> update-database -Verbose
    Using StartUp project 'Mvc4BlogsCF1'.
    Using NuGet project 'Mvc4BlogsCF1'.
    Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
    Target database is: 'Mvc4BlogsCF1.Models.BlogContext' (DataSource: .\SQLEXPRESS, Provider: System.Data.SqlClient, Origin: Convention).
    System.InvalidOperationException: La séquence contient plusieurs éléments correspondants.
       à System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
       à System.Data.Entity.Migrations.Infrastructure.MigrationAssembly.GetMigration(String migrationId)
       à System.Data.Entity.Migrations.DbMigrator.<GetHistorySchemas>b__5(String migrationId)
       à System.Linq.Enumerable.<>c__DisplayClass12`3.<CombineSelectors>b__11(TSource x)
       à System.Linq.Enumerable.WhereSelectListIterator`2.MoveNext()
       à System.Linq.Enumerable.<ConcatIterator>d__71`1.MoveNext()
       à System.Linq.Enumerable.<ConcatIterator>d__71`1.MoveNext()
       à System.Linq.Enumerable.<DistinctIterator>d__81`1.MoveNext()
       à System.Linq.Buffer`1..ctor(IEnumerable`1 source)
       à System.Linq.Enumerable.<ReverseIterator>d__a0`1.MoveNext()
       à System.Data.Entity.Migrations.History.HistoryRepository.QueryExists(String contextKey)
       à System.Data.Entity.Migrations.History.HistoryRepository.Exists(String contextKey)
       à System.Data.Entity.Migrations.History.HistoryRepository.<GetUpgradeOperations>d__16.MoveNext()
       à System.Linq.Enumerable.Any[TSource](IEnumerable`1 source)
       à System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration)
       à System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClassc.<Update>b__b()
       à System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
       à System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
       à System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)
       à System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration)
       à System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.Run()
       à System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
       à System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
       à System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)
       à System.Data.Entity.Migrations.Design.ToolingFacade.Update(String targetMigration, Boolean force)
       à System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()
       à System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
    La séquence contient plusieurs éléments correspondants.
    

    mardi 29 juillet 2014 16:08
  • Bonjour,

    Je penses que vous pouvez ouvrir la table [__MigrationHistory] et vérifier qu'il n'y ai pas de doublon dans la colonne [MigrationId].

    Si c'est le cas, supprimée la dernière entrée en doublon et relancez votre database-upgrade. Cela devrait se faire sans soucis.

    Cordialement,


    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.

    mercredi 30 juillet 2014 12:39
  • Bonjour,

    Voici ce qu'il y a dans la table (3 enregistrements) :

    MigrationId

    201407180944420_InitialCreate

    Model

    <Binary data>

    ProductVersion

    5.0.0.net40

    201407201828580_initial <Binary data> 5.0.0.net40
    201407201855470_migration2 <Binary data> 5.0.0.net40



    Avec un champ Binary data not null, il n'est pas simple de tenter, en mode edit dans SSMS, de créer un nouvel enregistrement pour tenter de créer un doublon en clef primaire. Je ne peux que supposer que la clef primaire aurait été un deuxième obstacle à la création de doublon que j'étais en train de tenter, puisque là le message me disait que je ne pouvais pas créer d'enregistrement avec le champ Model à null -et bien sûr si je mets du texte je me fais jeter aussi.

    jeudi 31 juillet 2014 07:23