gpt4 book ai didi

c# - Entity Framework 7 和 SQLite 表不创建

转载 作者:IT王子 更新时间:2023-10-29 06:32:12 25 4
gpt4 key购买 nike

一段时间以来,我一直在尝试弄清楚如何使用单个 DBContext 以 Code First 方式创建多个表,但没有任何运气。我确定这只是我对框架的不熟悉,但我不确定我错过了什么。这是一个包含实体和 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);
}
}

在我看来它应该可以工作,但是当我在下面的代码中调用它时,它会在遇到第一个 foreach 循环时出现“没有这样的表:MyEntity”Sqlite 异常。

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();
}

我几乎可以保证它是我遗漏的一些简单的东西,但我似乎找不到它,而且我在他们的文档中也找不到任何示例。 GitHub 上似乎也提交了类似的问题 https://github.com/aspnet/EntityFramework/issues/2874但这是针对多种情况的。所以也许这是另一件尚未完全发布的作品?

解决方案

按照 http://ef.readthedocs.org/en/latest/getting-started/uwp.html 上发布的教程进行操作正如@natemcmaster 和@lukas-kabrt 推荐的解决方案所建议的那样,我能够让它按需要工作。通过运行以下命令,我能够创建表并从中插入/选择数据。

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

最佳答案

查看 Getting Started on UWP - EF 7在官方文档中。以下注释来自该文档。

UWP 上的默认路径不可写。您的数据库文件需要位于 ApplicationData.Current.LocalFolder

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

另请注意,在 UWP 上,您无法通过命令运行迁移。您需要在应用程序中运行它们。

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

关于c# - Entity Framework 7 和 SQLite 表不创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33526617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com