Entity Framework 7 e SQLite Tables non creano

c# entity-framework-core sqlite

Domanda

Ho cercato per un po 'di capire come utilizzare un singolo DBContext per creare più tabelle in un codice First fashion senza fortuna. Sono sicuro che è solo la mia non familiarità con la struttura, ma non sono sicuro di cosa mi manchi. Ecco un semplice esempio con entità e DBContext.

[Table("MyEntity")]
public class MyEntity
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }
    public string MyColumn { get; set; }
    public int MyNumber { get; set; }
}

[Table("MySecondEntity")]
public class MySecondEntity
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }
    public string MyColumn { get; set; }
    public int MyNumber { get; set; }
}

public class MyContext : DbContext
{
    public DbSet<MyEntity> MyTable { get; set; }
    public DbSet<MySecondEntity> MyTable2 { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        var connectionStringBuilder = new SqliteConnectionStringBuilder {DataSource = "test.db"};
        var connectionString = connectionStringBuilder.ToString();
        var connection = new SqliteConnection(connectionString);

        optionsBuilder.UseSqlite(connection);
    }
}

Mi sembra che dovrebbe funzionare, ma quando lo chiamo nel codice qui sotto fa esplodere con un'eccezione Sqlite "no such table: MyEntity" quando si colpisce il primo ciclo foreach.

static void Main(string[] args)
    {
        using (var db = new MyContext())
        {

            MyEntity testEntity1 = new MyEntity();
            MySecondEntity entity1 = new MySecondEntity();

            testEntity1.MyColumn = "Test Data 1";
            testEntity1.MyNumber = 12345;

            db.MyTable.Add(testEntity1);
            db.Database.Migrate();

            entity1.MyColumn = "New Data 1";
            entity1.MyNumber = 2;

            db.MyTable2.Add(entity1);
            db.Database.Migrate();

            Console.WriteLine("Inserting Data...");

            Console.WriteLine("Data in the Database");

            foreach (var entity in db.MyTable)
            {
                Console.WriteLine("Id: " + entity.Id);
                Console.WriteLine("Column Data: " + entity.MyColumn);
                Console.WriteLine("Number: " + entity.MyNumber);
            }

            foreach (var entity in db.MyTable2)
            {
                Console.WriteLine("Id: " + entity.Id);
                Console.WriteLine("Column Data: " + entity.MyColumn);
                Console.WriteLine("Number: " + entity.MyNumber);
            }
        }

        Console.WriteLine("Examples run finished,press Enter to continue...");
        Console.ReadLine();
    }  

Posso quasi garantire che sia qualcosa di semplice. Mi manca ma non riesco a trovarlo e non ci sono esempi che possa trovare nella loro documentazione. Sembra che ci sia un problema simile presentato su GitHub qui https://github.com/aspnet/EntityFramework/issues/2874 ma questo è per più contesti. Quindi forse questo è un altro pezzo che non è ancora riuscito a farlo?

Soluzione

Seguendo il tutorial pubblicato su http://ef.readthedocs.org/en/latest/getting-started/uwp.html come suggerito da @natemcmaster e la soluzione raccomandata da @ lukas-kabrt, sono riuscito a farlo funzionare come desiderato. Eseguendo i comandi seguenti sono riuscito a creare le tabelle e inserire / selezionare i dati da esse.

Install-Package EntityFramework.Commands –Pre
Add-Migration MyFirstMigration
Update-Database

Risposta accettata

La classe DbContext contiene la configurazione del database: tabelle, relazioni, ecc. Per utilizzare DbContext è necessario creare un database che corrisponda a DbContext . Nel mondo Code-first, è fatto da migrazioni di database.

Per ASP.NET 5 è necessario aggiungere questa configurazione al file project.json

"commands": {
    "ef": "EntityFramework.Commands"
}

e quindi aggiungere una migrazione al progetto e applicare questa migrazione al DB eseguendo i seguenti comandi

dnx ef migrations add MyFirstMigration
dnx ef database update 

Per Full .NET è necessario eseguire i seguenti comandi nella console di Gestione pacchetti (Strumenti â € ¢ Gestore pacchetti NuGet â € ¢ Gestione pacchetti Manager)

Install-Package EntityFramework.Commands –Pre
Add-Migration MyFirstMigration
Update-Database

Risposta popolare

Scopri come iniziare su UWP - EF 7 nei documenti ufficiali. Le seguenti note provengono da quel documento.

Il percorso predefinito su UWP non è scrivibile. Il tuo file DB deve essere in ApplicationData.Current.LocalFolder

options.UseSqlite("Data Source=" + Path.Combine(ApplicationData.Current.LocalFolder.Path, "blogging.db"))

Inoltre, prendere nota che su UWP non è possibile eseguire migrazioni dai comandi. Devi eseguirli nell'app.

       using (var db = new BloggingContext())
        {
            db.Database.Migrate();
        }


Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché