【问题标题】:SQLite code-first onModelCahnge how to keep the old data from databseSQLite 代码优先 ngModelChange 如何保留数据库中的旧数据
【发布时间】:2016-01-22 02:04:33
【问题描述】:

我是 Sqlite 和 EF 的新手。

我用一些模型类创建了一个 DbContext,它将在应用启动时创建一个本地数据库。数据库将在应用程序运行时更新。

当我更改模型中的某些内容(例如:向类添加新属性)并运行应用程序时,整个数据库正在从头开始重新创建。所以我丢失了我保存的数据。

即使模型发生变化,我如何保留旧数据。

例如:

Database.table1
ID | Name
1  | abc
2  | xyz

当我向 table1 类添加新道具时,它会用空数据重新创建表,如果可能的话,我需要这样的东西。

Database.table1
ID | Name | NewProp
1  | abc  | Null
2  | xyz  | Null

【问题讨论】:

    标签: c# asp.net entity-framework sqlite ef-code-first


    【解决方案1】:

    数据库初始化程序是导致在模型更改时重新创建数据库的原因。因此,您可以通过将其设置为 null 来禁用初始化程序:

    Database.SetInitializer<MyContext>(null);
    

    这当然意味着您需要手动使数据库与模型匹配。另一种选择是使用不会删除和创建数据库的初始化程序。看起来这里有一个 SqlLite 项目:https://github.com/msallin/SQLiteCodeFirst 那么你可以使用 SqliteCreateDatabaseIfNotExists。

    最后,您可以使用迁移。看起来不支持开箱即用,因此您需要第三方工具。 Entity Framework MigrationSqlGenerator for SQLite

    【讨论】:

    • 感谢您的详细解答。所以我正在尝试使用SQLite.CodeFirst 源代码为迁移创建自定义初始化程序。如果效果不好,我会转到 SQL CE。
    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    相关资源
    最近更新 更多