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()的方法。它可能会做一些事情来反映我的数据库。但我不知道如何让它工作。请帮助我
您正在使用Database.SetInitializer<BookLibraryContext>(null);
,这会导致实体框架在启动时不执行初始化,这意味着您的数据需要已经与类匹配。
您可以使用以下初始值设定项代替null
:
-
CreateDatabaseIfNotExists
. 如果不存在,这将创建一个新数据库。 但是,更改模型不会重新创建数据库,并且程序将出错。 -
DropCreateDatabaseIfModelChanges
如果模型发生更改,这将创建一个新数据库,如果模型保持不变,这将保留现有数据库。 -
DropCreateDatabaseAlways
这将在每次程序运行时创建一个新数据库。 -
MigrateDatabaseToLatestVersion
这将处理实体框架迁移,以保留数据库中的数据,并根据需要添加或删除表(也称为数据移动)。
从长远来看,迁移是最难设置的,但最容易维护。 但是,对于测试,任何选项都可以。
使用其中一个初始值设定项的示例如下:
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<BookLibraryContext>());