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<BookLibraryContext>(null);
,这会导致实体框架在启动时不进行初始化,这意味着您的数据需要已经与您的类匹配。
您可以使用以下初始化程序代替null
:
CreateDatabaseIfNotExists
。如果不存在,这将创建一个新数据库。但是,更改模型不会重新创建数据库,程序会出错。
DropCreateDatabaseIfModelChanges
如果模型发生变化,这将创建一个新数据库,如果模型保持不变,则保留现有数据库。
DropCreateDatabaseAlways
这将在程序每次运行时创建一个新的数据库。
MigrateDatabaseToLatestVersion
这将处理实体框架迁移,以保留数据库中的数据并根据需要添加或删除表(也称为数据移动)。
从长远来看,迁移最难设置,但最容易维护。但是,对于测试,任何选项都可以。
使用其中一个初始化器的示例是:
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<BookLibraryContext>());
【讨论】:
以上是关于WAF(WPF 应用程序框架)添加新的实体表的主要内容,如果未能解决你的问题,请参考以下文章