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

Posted

技术标签:

【中文标题】WAF(WPF 应用程序框架)添加新的实体表【英文标题】:WAF ( WPF Application Framework ) Add new entity-table 【发布时间】:2014-03-31 06:25:26 【问题描述】:

我在这里使用 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 ]"

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

但我看到了名为 HasChange() 的方法。它可能会反映我的数据库。但我不知道让它工作。请帮帮我

【问题讨论】:

***.com/questions/2375118/how-to-open-sdf-files你可能需要打开数据库BookLibrary2.sdf来添加表。 【参考方案1】:

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

您可以使用以下初始化程序代替null

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

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

使用其中一个初始化器的示例是:

Database.SetInitializer(new DropCreateDatabaseIfModelChanges&lt;BookLibraryContext&gt;());

【讨论】:

以上是关于WAF(WPF 应用程序框架)添加新的实体表的主要内容,如果未能解决你的问题,请参考以下文章

WPF 实体框架刷新一个上下文实体

WPF C# 应用程序在安装更新时更新实体框架

WPF 文化问题

实体框架 + SQL Server Compact + WPF/WinForms = 缓慢的 UI?

实体框架和多线程

如何在 MCV 中合并两个实体框架查询