Entity Framework 7 y SQLite Tables no crean

c# entity-framework-core sqlite

Pregunta

Durante un tiempo he intentado descubrir cómo usar un solo DBContext para crear varias tablas de una manera de Code First sin ninguna suerte. Estoy seguro de que es solo mi falta de familiaridad con el marco, pero no estoy seguro de lo que me estoy perdiendo. Aquí hay un ejemplo simple con las entidades y el 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);
    }
}

Me parece que debería funcionar, pero cuando lo llamo en el siguiente código, explota con una excepción Sqlite de 'no existe tal tabla: MyEntity' cuando llega al primer bucle 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();
    }  

Casi puedo garantizar que es algo simple. Me falta, pero parece que no puedo encontrarlo, y no hay ningún ejemplo que pueda encontrar en su documentación. Parece que hay un problema similar enviado en GitHub aquí https://github.com/aspnet/EntityFramework/issues/2874 pero eso es para múltiples contextos. Entonces, ¿quizás esta es otra pieza que aún no se ha publicado?

Solución

Siguiendo el tutorial publicado en http://ef.readthedocs.org/en/latest/getting-started/uwp.html según lo sugerido por @natemcmaster y la solución recomendada por @ lukas-kabrt, pude hacer que funcionara como deseado. Al ejecutar los siguientes comandos, pude obtener las tablas creadas e insertar / seleccionar datos de ellas.

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

Respuesta aceptada

La clase DbContext contiene la configuración de su base de datos: tablas, relaciones, etc. Para usar DbContext , debe crear una base de datos que coincida con su DbContext . En el mundo de Code-first, se realiza mediante migraciones de base de datos.

Para ASP.NET 5 necesita agregar esta configuración a su archivo project.json

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

y luego agregue una migración a su proyecto y aplique esta migración a la base de datos ejecutando los siguientes comandos

dnx ef migrations add MyFirstMigration
dnx ef database update 

Para .NET completo , debe ejecutar los siguientes comandos en la Consola del Administrador de paquetes (Herramientas - NuGet Package Manager - Consola del Administrador de paquetes)

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

Respuesta popular

Echa un vistazo a Getting Started on UWP - EF 7 en los documentos oficiales. Las siguientes notas son de ese documento.

La ruta predeterminada en UWP no se puede escribir. Su archivo DB debe estar en ApplicationData.Current.LocalFolder

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

Además, tenga en cuenta que en UWP no puede ejecutar migraciones desde comandos. Necesitas ejecutarlos en la aplicación.

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



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué