WAF(WPF 应用程序框架)添加新的实体表

本文关键字:实体 添加 WPF 应用程序框架 WAF | 更新日期: 2023-09-27 17:55:44

我在这里使用WAF(WPF应用程序框架):https://waf.codeplex.com。我打开了示例中的 BookLibrary 项目。我有一个名为 Author 的模型和它相关的类。

这就是它 DbContext:..

internal class BookLibraryContext : DbContext
    {
        public BookLibraryContext(DbConnection dbConnection)
            : base(dbConnection, false)
        {
            Database.SetInitializer<BookLibraryContext>(null);
        }
        public BookLibraryContext()
            : base(@"Data Source=|DataDirectory|'Resources'BookLibrary2.sdf")
        {
        }
        public bool HasChanges
        {
            get
            {
                ChangeTracker.DetectChanges();
                // It is necessary to ask the ObjectContext if changes could be detected because the
                // DbContext does not provide the information when a navigation property has changed.
                return ObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Added).Any()
                    || ObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Modified).Any()
                    || ObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Deleted).Any();
            }
        }
        private ObjectContext ObjectContext { get { return ((IObjectContextAdapter)this).ObjectContext; } }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Configurations.Add(new PersonMapping());
            modelBuilder.Configurations.Add(new BookMapping());
            modelBuilder.Configurations.Add(new AuthorMapping());
        }
    }

当我运行项目时。发生异常:

{"The specified table does not exist. [ Author ]"}

如何添加名为作者的新表? 我知道使用实体框架迁移或使用工具编辑数据库结构体。

但是我看到了名为HasChange()的方法。它可能会做一些事情来反映我的数据库。但我不知道如何让它工作。请帮助我

WAF(WPF 应用程序框架)添加新的实体表

您正在使用Database.SetInitializer<BookLibraryContext>(null);,这会导致实体框架在启动时不执行初始化,这意味着您的数据需要已经与类匹配。

您可以使用以下初始值设定项代替null

  1. CreateDatabaseIfNotExists . 如果不存在,这将创建一个新数据库。 但是,更改模型不会重新创建数据库,并且程序将出错。
  2. DropCreateDatabaseIfModelChanges 如果模型发生更改,这将创建一个新数据库,如果模型保持不变,这将保留现有数据库。
  3. DropCreateDatabaseAlways 这将在每次程序运行时创建一个新数据库。
  4. MigrateDatabaseToLatestVersion 这将处理实体框架迁移,以保留数据库中的数据,并根据需要添加或删除表(也称为数据移动)。

从长远来看,迁移是最难设置的,但最容易维护。 但是,对于测试,任何选项都可以。

使用其中一个初始值设定项的示例如下:

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<BookLibraryContext>());