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

Entity Framework Discussion :

Problème de migration base sqlite + c# + UWP [Débutant]


Sujet :

Entity Framework

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 60
    Points : 28
    Points
    28
    Par défaut Problème de migration base sqlite + c# + UWP
    Bonjour,

    Visual Studio 2017 Version 15.2 (26430.15) Release
    Microsoft.EntityFrameworkCore.Sqlite V1.1.2
    Microsoft.EntityFrameworkCore.Tools v1.1.1
    Microsoft.NetCore.UniversalWindosPlatform v5.3.3
    SQLite.Net-PCL v3.1.1
    System.Data.SQLite v1.0.105.2
    Microsoft .NET Framework 4.7.02046

    Je débute dans l'utilisation de SQLIte via Entity Framework pour UWP.
    Mon problème est le suivant: impossible de migrer ma base SQLite créée.
    Dans la console:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    PM> add-migration
    applet de commande Add-Migration à la position 1 du pipeline de la commande
    Fournissez des valeurs pour les paramètres suivants*:
    Name:
    Je ne sait quoi mettre comme 'Name'???

    De plus si j’exécute mon appli (qui en est à un stade plus que minimaliste), j'ai l'erreur suivante:

    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
     
    L'exception Microsoft.EntityFrameworkCore.DbUpdateException s'est produite
      HResult=0x80131500
      Message=An error occurred while updating the entries. See the inner exception for details.
      Source=<Impossible d'évaluer la source de l'exception>
      Arborescence des appels de procédure*:
       à Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.Execute(IRelationalConnection connection)
       à Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.Execute(Tuple`2 parameters)
       à Microsoft.EntityFrameworkCore.Storage.Internal.NoopExecutionStrategy.Execute[TState,TResult](Func`2 operation, Func`2 verifySucceeded, TState state)
       à Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.Execute[TState,TResult](IExecutionStrategy strategy, Func`2 operation, TState state)
       à Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.Execute(IEnumerable`1 commandBatches, IRelationalConnection connection)
       à Microsoft.EntityFrameworkCore.Storage.RelationalDatabase.SaveChanges(IReadOnlyList`1 entries)
       à Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(IReadOnlyList`1 entriesToSave)
       à Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(Boolean acceptAllChangesOnSuccess)
       à Microsoft.EntityFrameworkCore.DbContext.SaveChanges(Boolean acceptAllChangesOnSuccess)
       à Microsoft.EntityFrameworkCore.DbContext.SaveChanges()
       à SQLiteUWPEF.MainPage..ctor() dans C:\Users\zest\documents\visual studio 2017\Projects\SQLiteUWPEF\SQLiteUWPEF\MainPage.xaml.cs :ligne 33
       à SQLiteUWPEF.SQLiteUWPEF_XamlTypeInfo.XamlTypeInfoProvider.Activate_0_MainPage() dans C:\Users\Stéphane\documents\visual studio 2017\Projects\SQLiteUWPEF\SQLiteUWPEF\obj\x86\Debug\XamlTypeInfo.g.cs :ligne 178
       à SQLiteUWPEF.SQLiteUWPEF_XamlTypeInfo.XamlUserType.ActivateInstance() dans C:\Users\Stéphane\documents\visual studio 2017\Projects\SQLiteUWPEF\SQLiteUWPEF\obj\x86\Debug\XamlTypeInfo.g.cs :ligne 333
     
    Exception interne 1*:
    SqliteException*: SQLite Error 1: 'table MyTable has no column named OneColumn'.
    Après mes recherche sur le Net, il s'agirais à priori d'un problème de migration de ma base.

    Et là je n'y pige pas grand chose....donc: HELP!!

    À vrai, dire je ne suis absolument pas certain de l'implémentation de mon code.


    Merci

    Mon MainPage.xaml.cs
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    using Microsoft.EntityFrameworkCore;
    using Windows.UI.Xaml.Controls;
    using Windows.UI.Popups;
    using System.Collections.Generic;
    using System.Linq;
     
    // Pour plus d'informations sur le modèle d'élément Page vierge, consultez la page https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
     
    namespace SQLiteUWPEF
    {
        /// <summary>
        /// Une page vide peut être utilisée seule ou constituer une page de destination au sein d'un frame.
        /// </summary>
        public sealed partial class MainPage : Page
        {
            public MainPage()
            {
                this.InitializeComponent();
     
                List<string> outSQL = new List<string>();
     
                using (var db = new MyContext())
                {
     
                    //db.Database.EnsureCreated();
                    db.MyTable.Count();            
     
                    MyEntity Stak = new MyEntity();
                    Stak.MyColumn = "ALBERT";
                    Stak.YourColumn = "Londres";
                    Stak.OneColumn = "AZERTY";
                    db.MyTable.Add(Stak);
                    db.SaveChanges();
     
                    outSQL = (from g in db.MyTable select g.MyColumn).ToList();
                    lstV1.ItemsSource = outSQL;            
     
                    db.Dispose();
     
     
                }
            }
     
        }
    }
    MyContext.cs
    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
     
    using Microsoft.Data.Sqlite;
    using Microsoft.EntityFrameworkCore;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
     
    namespace SQLiteUWPEF
    {
        public class MyContext : DbContext
        {
            // This property defines the table
            public DbSet<MyEntity> MyTable { get; set; }
     
            // This method connects the context with the database
            protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
            {
                var connectionStringBuilder = new SqliteConnectionStringBuilder { DataSource = "uwp.sqlite" };
                var connectionString = connectionStringBuilder.ToString();
                var connection = new SqliteConnection(connectionString);
     
                optionsBuilder.UseSqlite(connection);
            }
        }
    }
    App.xaml.cs:
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
     
    using Microsoft.EntityFrameworkCore;
    using System;
    using System.Linq;
    using Windows.ApplicationModel;
    using Windows.ApplicationModel.Activation;
    using Windows.UI.Xaml;
    using Windows.UI.Xaml.Controls;
    using Windows.UI.Xaml.Navigation;
    using Windows.UI.Popups;
    using System.Collections.Generic;
    using Microsoft.EntityFrameworkCore.Migrations;
    using System.IO;
    using System.Runtime.InteropServices.WindowsRuntime;
     
    namespace SQLiteUWPEF
    {
        /// <summary>
        /// Fournit un comportement spécifique à l'application afin de compléter la classe Application par défaut.
        /// </summary>
        sealed partial class App : Application
        {
            /// <summary>
            /// Initialise l'objet d'application de singleton.  Il s'agit de la première ligne du code créé
            /// à être exécutée. Elle correspond donc à l'équivalent logique de main() ou WinMain().
            /// </summary>
            public App()
            {
                this.InitializeComponent();
                this.Suspending += OnSuspending;
     
                using (var db = new MyContext())
                {
                    db.Database.Migrate();
                }
     
                //List<string> outSQL = new List<string>();
     
                // using (var db = new MyContext())
                // {
                //     db.Database.EnsureCreated();
                //     //db.Database.ApplyMigrations();
                //     //db.MyTable.migrate();
                //     //MyTable.Initialize(db);
     
     
                //     MyEntity Stak = new MyEntity();
                //     Stak.MyColumn = "ALBERT";
                //     //Stak.YourColumn = "Londres";
                //     //Stak.OneColumn = "AZERTY";
                //     db.MyTable.Add(Stak);
                //     db.SaveChanges();
     
                //     outSQL = (from g in db.MyTable select g.MyColumn).ToList();
                //     db.Dispose();
     
                //     var messageDialog = new MessageDialog(outSQL[1]);
                //     //foreach (string item in outSQL)
                //     //{
                //     //    //displayNoWifiDialog(item);
                //     //    var messageDialog = new MessageDialog(item);
                //     //}
     
                // }
            }
     
            /// <summary>
            /// Invoqué lorsque l'application est lancée normalement par l'utilisateur final.  D'autres points d'entrée
            /// seront utilisés par exemple au moment du lancement de l'application pour l'ouverture d'un fichier spécifique.
            /// </summary>
            /// <param name="e">Détails concernant la requête et le processus de lancement.</param>
            protected override void OnLaunched(LaunchActivatedEventArgs e)
            {
                Frame rootFrame = Window.Current.Content as Frame;
     
                // Ne répétez pas l'initialisation de l'application lorsque la fenêtre comporte déjà du contenu,
                // assurez-vous juste que la fenêtre est active
                if (rootFrame == null)
                {
                    // Créez un Frame utilisable comme contexte de navigation et naviguez jusqu'à la première page
                    rootFrame = new Frame();
     
                    rootFrame.NavigationFailed += OnNavigationFailed;
     
                    if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
                    {
                        //TODO: chargez l'état de l'application précédemment suspendue
                    }
     
                    // Placez le frame dans la fenêtre active
                    Window.Current.Content = rootFrame;
                }
     
                if (e.PrelaunchActivated == false)
                {
                    if (rootFrame.Content == null)
                    {
                        // Quand la pile de navigation n'est pas restaurée, accédez à la première page,
                        // puis configurez la nouvelle page en transmettant les informations requises en tant que
                        // paramètre
                        rootFrame.Navigate(typeof(MainPage), e.Arguments);
                    }
                    // Vérifiez que la fenêtre actuelle est active
                    Window.Current.Activate();
                }
            }
     
            /// <summary>
            /// Appelé lorsque la navigation vers une page donnée échoue
            /// </summary>
            /// <param name="sender">Frame à l'origine de l'échec de navigation.</param>
            /// <param name="e">Détails relatifs à l'échec de navigation</param>
            void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
            {
                throw new Exception("Failed to load Page " + e.SourcePageType.FullName);
            }
     
            /// <summary>
            /// Appelé lorsque l'exécution de l'application est suspendue.  L'état de l'application est enregistré
            /// sans savoir si l'application pourra se fermer ou reprendre sans endommager
            /// le contenu de la mémoire.
            /// </summary>
            /// <param name="sender">Source de la requête de suspension.</param>
            /// <param name="e">Détails de la requête de suspension.</param>
            private void OnSuspending(object sender, SuspendingEventArgs e)
            {
                var deferral = e.SuspendingOperation.GetDeferral();
                //TODO: enregistrez l'état de l'application et arrêtez toute activité en arrière-plan
                deferral.Complete();
            }
     
        }
    }
    MyEntity.cs
    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
     
    using Microsoft.EntityFrameworkCore;
    using System.Collections.Generic;
    using SQLite.Net.Attributes;
     
    namespace SQLiteUWPEF
    {
        public class MyEntity
        {
            [PrimaryKey, AutoIncrement]
            public int id { get; set; }
            public string MyColumn { get; set; }
            public string YourColumn { get; set; }
            public string OneColumn { get; set; }
     
            public MyEntity()
            {
     
            }
        }
     
    }
    MainPage.xaml
    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
     
    <Page
        x:Class="SQLiteUWPEF.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:SQLiteUWPEF"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">
     
        <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
            <TextBox x:Name="txtBox01" HorizontalAlignment="Left" Margin="112,114,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="138"/>
            <ListView x:Name="lstV1" HorizontalAlignment="Left" Height="147" Margin="112,151,0,0" VerticalAlignment="Top" Width="238"/>
     
        </Grid>
    </Page>

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 60
    Points : 28
    Points
    28
    Par défaut
    Je viens de refaire sur une autre session Visual Studio 2017, exactement le même programme.
    Et tout fonctionne!!

    En fait j'avais rajouté deux champs dans la classe MyEntity après coup.
    au début:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [PrimaryKey, AutoIncrement]
            public int ID { get; set; }
            public string MyColumn { get; set; }
    Un premier RUN, puis j'avais voulu rajouter, YourColumn et OneColumn
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    [PrimaryKey, AutoIncrement]
            public int ID { get; set; }
            public string MyColumn { get; set; }
            public string YourColumn { get; set; }
            public string OneColumn { get; set; }
    Il s'agit donc bien d'un problème de db.Migrate...mais je ne trouve pas!!!
    En gros comment modifier en cours de développement la structure d'une table?

  3. #3
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Quand tu appelles la commande Add-Migration il faut que tu passes un nom, qui sera le nom de cette migration.

    Par exemple si tu rajoutes des colonnes tu peux avoir un nom de migration comme "AddedColumnsOnTableMyTable". Ca peut etre ce que tu veux tant que ca n'a pas ete deja utilise (unique) et que ca respecte les conventions de nommage.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 60
    Points : 28
    Points
    28
    Par défaut
    J'ai bien essayé mai sans succès, voici-le message ( j'ai juste rajouté un champ 'TwoColumn') dans la classe MyEntity
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    PM> Add-Migration ColVille
    To undo this action, use Remove-Migration.
    Add-Migration : Impossible d'ajouter le lien, car le fichier source 'C:\Users\zest\Documents\Visual Studio 2017\Projects\SQLitUWPnewTEST\SQLitUWPnewTEST\Migrations\20170710110939_ColVille.cs' est 
    introuvable.
    Au caractère Ligne:1 : 1
    + Add-Migration ColVille
    + ~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : OperationStopped: (:) [Add-Migration], COMException
        + FullyQualifiedErrorId : System.Runtime.InteropServices.COMException,Add-Migration
     
    PM>

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 60
    Points : 28
    Points
    28
    Par défaut
    Nouvel essai:
    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
     
    PM> Add-Migration
    applet de commande Add-Migration à la position 1 du pipeline de la commande
    Fournissez des valeurs pour les paramètres suivants*:
    Name: MaMigrTwoColumn
    To undo this action, use Remove-Migration.
    Add-Migration : Impossible d'ajouter le lien, car le fichier source 'C:\Users\St�phane\Documents\Visual Studio 2017\Projects\SQLitUWPnewTEST\SQLitUWPnewTEST\Migrations\20170710111624_MaMigrTwoColumn.cs' est 
    introuvable.
    Au caractère Ligne:1 : 1
    + Add-Migration
    + ~~~~~~~~~~~~~
        + CategoryInfo          : OperationStopped: (:) [Add-Migration], COMException
        + FullyQualifiedErrorId : System.Runtime.InteropServices.COMException,Add-Migration
     
    PM>
    Je ne vois pas du tout....

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Etrange. Est-ce que tu compiles ton projet en x64 ? Si oui, essaie en x86 pour voir ce que ca donne.

    Sinon, il y a pas mal de problemes reportes ici : 17 issues in aspnet/EntityFramework. Je sais que tu n'est pas en ASP.NET, mais les problemes pour UWP sont egalement reportes ici. Dans la liste on peut voir plusieurs tickets au sujet d'UWP.

    Il y a une autre solution postee ici : How do I fix “Add-Migration : Cannot add the link because the source file '' cannot be found”?.

    Tu peux aussi essayer de lancer VS en mode Admin pour etre sur que ca ne soit pas un simple probleme de permission qui empecherait VS d'ecrire la classe de migration sur le disque dur.

    Enfin, tu peux creer ta classe de migration a la main... C'est un peu de boulot mais ca devrait fonctionner.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 60
    Points : 28
    Points
    28
    Par défaut
    J'ai essayé en x86, x64 et Device, c'est la même chose....

    En fait j'ai contourné le problème en recréant le projet.

    Mais si je dois de nouveau changer la structure d'une de mes tables...aïe!! :-(

    Oui j'ai rencontré pas mal de post sur divers forums (surtout US) où il semblerait y avoir des problèmes avec Add-migration et VS 2017....

    Je vais essayé d'investiguer un peu plus....mais si tu as la réponse, je suis là! :-)

    https://docs.microsoft.com/en-us/ef/...cli/powershell

  8. #8
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    En attendant une amelioration il te reste toujours la solution de creer les classes de migration a la main, ca t'evitera deja de recreer tout le projet...

    [EDIT] Voici un exemple :

    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
    namespace CodeFirstNewDatabaseSample.Migrations 
    { 
        using System; 
        using System.Data.Entity.Migrations; 
     
        public partial class AddUrl : DbMigration 
        { 
            public override void Up() 
            { 
                AddColumn("dbo.Blogs", "Url", c => c.String()); 
            } 
     
            public override void Down() 
            { 
                DropColumn("dbo.Blogs", "Url"); 
            } 
        } 
    }
    La methode Up() doit contenir le code pour upgrader la base vers la nouvelle modification (Update-Database), et Down() doit contenir le code pour revenir en arriere (Remove-Migration).

    source : Entity Framework Code First to a New Database

    Enfin tu peux aussi faire le sens inverse, c'est-a-dire utiliser Database-First au lieu de Code-First.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 60
    Points : 28
    Points
    28
    Par défaut
    Merci pour tes réponses plus que détaillées!!!
    Je teste ça et je fais un retour....

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 60
    Points : 28
    Points
    28
    Par défaut
    Je n'ai pas le using

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    using System.Data.Entity.Migrations;
    je signale que je suis sous Visual 2017 Net.Core.

  11. #11
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Pour Core il faut utiliser Microsoft.EntityFrameworkCore.Migrations.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 60
    Points : 28
    Points
    28
    Par défaut
    Deux mois après...le retour!!

    Pris par d'autres projets, je reviens car le problème n'est toujours pas solutionné!

    Il m'est impossible de coder cet exemple simple: https://docs.microsoft.com/en-us/ef/...etting-started

    Entre temps je suis passé en version Visual Studio 2017 15.4.

    Mais il m'est impossible d'installer: Install-Package Microsoft.EntityFrameworkCore.Tools

    Si quelqu'un avait un solution.Merci.

  13. #13
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Comme ton projet est en .NET Core 1.1, il faut que tu vises les DLL avec cette version (quand elles proviennent de Microsoft). Si tu installes une DLL de Microsoft en v2.0, ca cible .NET Core 2.0.

    Donc tu dois passer la commande : Install-Package Microsoft.EntityFrameworkCore.Tools -Version 1.1.1.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 60
    Points : 28
    Points
    28
    Par défaut
    Merci,

    Effectivement Install-Package Microsoft.EntityFrameworkCore.Tools -Version 1.1.1 est implémenté sans problème....

    Mais la méthode UseSqlite n'est pas reconnu....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
            {
                optionsBuilder.UseSqlite("Data Source=blogging.db");
            }
    DbContextOptionsBuilder ne contient pas de définition pour UseSqlite....

    le passage à VS2017 + UWP c'est pas gagné!!

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 60
    Points : 28
    Points
    28
    Par défaut
    Bon, j'ai installé: Install-Package Microsoft.EntityFrameworkCore.Sqlite -Version 1.1.1

    Et la méthode est acceptée.....

    Je teste...

    https://docs.microsoft.com/en-us/ef/...etting-started

    OK pour cet exemple, je retourne donc au début du problème ;-)

    Je ferais un retour....

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 60
    Points : 28
    Points
    28
    Par défaut
    J'ai retesté le projet initial (voir debut de cette discussion) et j'ai toujours "build error"....lors du ADD-MIGRATION MyFirstMigration

    J'ai bien intégré les packages suivants:
    Install-Package Microsoft.EntityFrameworkCore.Sqlite -Version 1.1.1
    Install-Package Microsoft.EntityFrameworkCore.Tools -Version 1.1.1

    Le fait de rajouter une colonne est bloquant...

  17. #17
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par zest Voir le message
    Le fait de rajouter une colonne est bloquant...
    Ca, c'est du SQL basique... Il y a 2 cas de figure :
    1 - La table contient deja des donnees, auquel cas tu es oblige de creer la colonne en acceptant les valeurs NULL (ca semble etre ton cas ici).
    2 - La table ne contient pas de donnees, auquel cas tu peux creer la colonne sans qu'elle n'accepte les valeurs NULL.

    Dans le cas 1, si ton objectif est que cette colonne n'accepte pas NULL, alors il faut :
    - Creer la colonne en acceptant les valeurs NULL
    - Inserer des donnees dans cette colonne pour chaque enregistrement
    - Desactiver l'option qui accepte les NULL
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 60
    Points : 28
    Points
    28
    Par défaut
    Je fais la màj 15.3.5 et je recommence le projet à zéro....mais hormis l'ID les autres champs acceptent le NULL.

    Je recode de zéro, et je retombe sur ça:

    L'exception Microsoft.Data.Sqlite.SqliteException s'est produite
    HResult=0x80131500
    Message=SQLite Error 1: 'no such table: Table_A'.
    Source=<Impossible d'évaluer la source de l'exception>
    Arborescence des appels de procédure*:
    à System.Linq.Expressions.Interpreter.MethodInfoCallInstruction.InvokeWorker(Object[] args)
    à System.Linq.Expressions.Interpreter.MethodInfoCallInstruction.Invoke(Object[] args)
    à System.Linq.Expressions.Interpreter.MethodInfoCallInstruction.Run(InterpretedFrame frame)
    à System.Linq.Expressions.Interpreter.Interpreter.Run(InterpretedFrame frame)
    à System.Linq.Expressions.Interpreter.LightLambda.Run(Object[] arguments)
    à Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.<>c__DisplayClass20_0`1.<CompileQueryCore>b__0(QueryContext qc)
    à Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute[TResult](Expression query)
    à Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.Execute[TResult](Expression expression)
    à System.Linq.Queryable.Count[TSource](IQueryable`1 source)
    à UWPSqliteEF1909.MainPage..ctor() dans c:\users\evonz\documents\visual studio 2017\Projects\UWPSqliteEF1909\UWPSqliteEF1909\MainPage.xaml.cs :ligne 35
    à UWPSqliteEF1909.UWPSqliteEF1909_XamlTypeInfo.XamlTypeInfoProvider.Activate_0_MainPage() dans c:\users\evonz\documents\visual studio 2017\Projects\UWPSqliteEF1909\UWPSqliteEF1909\obj\x86\Debug\XamlTypeInfo.g.cs :ligne 178
    à UWPSqliteEF1909.UWPSqliteEF1909_XamlTypeInfo.XamlUserType.ActivateInstance() dans c:\users\evonz\documents\visual studio 2017\Projects\UWPSqliteEF1909\UWPSqliteEF1909\obj\x86\Debug\XamlTypeInfo.g.cs :ligne 333

    !!!! ????
    J'ai créé une base SQLITE vide, qui hormis l'ID accepte sur tous ses champs la valeur NULL.
    Comme dépendances j'ai:
    Nom : Capture.PNG
Affichages : 1242
Taille : 32,5 Ko

    Si j'effectue un ADD-Migration:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    PM> ADD-MIGRATION MyFirstMigration
    To undo this action, use Remove-Migration.
    ADD-MIGRATION : Impossible d'ajouter le lien, car le fichier source 'c:\users\evonz\documents\visual studio 
    2017\Projects\UWPSqliteEF1909\UWPSqliteEF1909\Migrations\20170919194644_MyFirstMigration.cs' est introuvable.
    Au caractère Ligne:1 : 1
    + ADD-MIGRATION MyFirstMigration
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : OperationStopped: (:) [Add-Migration], COMException
        + FullyQualifiedErrorId : System.Runtime.InteropServices.COMException,Add-Migration
    Je suis PAUMÉ!!!

  19. #19
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 60
    Points : 28
    Points
    28
    Par défaut
    Je vais tester cet exemple: https://nordinemhoumadi.wordpress.co...selle-windows/


    ECHEC!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    add-migration : Impossible d'ajouter le lien, car le fichier source 'c:\users\evonz\documents\visual studio 
    2017\Projects\App1EntityFrameworkSample\App1EntityFrameworkSample\Migrations\20170919203358_secondDBM.cs' est introuvable.
    Au caractère Ligne:1 : 1
    + add-migration
    + ~~~~~~~~~~~~~
        + CategoryInfo          : OperationStopped: (:) [Add-Migration], COMException
        + FullyQualifiedErrorId : System.Runtime.InteropServices.COMException,Add-Migration

  20. #20
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 60
    Points : 28
    Points
    28
    Par défaut
    Comme je suis persévérant (LOL), j'ai essayé ça:

    https://docs.microsoft.com/en-us/ef/...-your-database

    ET je suis bloqué au fameux: Add-Migration MyFirstMigration !!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problème de migration base oracle 32 bits vers base 64 bits
    Par lynxdu37 dans le forum Installation
    Réponses: 7
    Dernier message: 17/04/2012, 11h11
  2. Problème de migration de bases Mysql vers Oracle
    Par mcgiant dans le forum Administration
    Réponses: 0
    Dernier message: 19/06/2009, 17h02
  3. Réponses: 4
    Dernier message: 07/03/2008, 09h40
  4. [Débutant] Problème de Connexion base de données sous Glassfish
    Par kimlee dans le forum Glassfish et Payara
    Réponses: 4
    Dernier message: 20/01/2008, 13h56
  5. [VB6]Débutant - Problèmes de base de données?
    Par steeves5 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 08/06/2006, 22h05

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