我无法弄清楚为什么我的最新迁移没有在应用程序启动时自动执行(或者至少在首次访问数据库上下文时).我曾经在开发中手动运行update-database,但我想测试它是否会在托管测试环境中自动升级.
在Application_Start()中:
Database.SetInitializer<FepazoContext>(
new MigrateDatabaseToLatestVersion<FepazoContext, FepazoConfiguration>())
Run Code Online (Sandbox Code Playgroud)
在FepazoConfiguration中:
internal sealed class FepazoConfiguration :
DbMigrationsConfiguration<Fepazo.Models.FepazoContext>
{
public FepazoConfiguration()
{
AutomaticMigrationsEnabled = true;
}
}
Run Code Online (Sandbox Code Playgroud)
我甚至将它添加到FepazoContext的构造函数中:
public FepazoContext() : base("DefaultConnection")
{
Database.Initialize(false);
}
Run Code Online (Sandbox Code Playgroud)
一些额外的信息:
__MigrationHistory表时,我可以看到迁移尚未被"记录"为执行.AutomaticMigrationsEnabled设置未在Web.config文件中被覆盖.FepazoContext构造函数中的断点FepazoConfiguration 正在受到打击.我忘记了什么吗?我可以深入挖掘,找出它出错的地方吗?
更新
传递True到Database.Initialize试图强行迁移也没有任何影响.Database.CompatibleWithModel(true)返回false - 因此系统检测到存在差异,但是它不执行挂起的迁移!
public FepazoContext() : base("DefaultConnection")
{
if (!Database.CompatibleWithModel(true))
{
// This is executed (each time the code enters)
Database.Initialize(true);
}
}
Run Code Online (Sandbox Code Playgroud)
解决方法
作为一种解决方法,我 …
asp.net-mvc entity-framework database-migration ef-code-first
我正在cherry-pick对多个文件进行大型提交。存在一些冲突,但对于某些冲突的文件,我确信我不需要任何更改。我只想恢复该提交中应用于这些文件的所有更改 - 有点像 svn 中的“使用我的解决方案”,或者git checkout <filename>撤消应用于文件的更改(这在这里似乎不起作用)。
是否有命令可以执行此操作,而无需手动检查这些文件中的差异?
FFR,请随意添加使用他们的解决方案的操作。
git merge-conflict-resolution git-cherry-pick git-merge-conflict
在一个组件中,我使用 store 为我的状态的某些部分订阅了一个 Subject。从那时起,当那部分状态发生变化时,我将开始接收更新,我的组件将反映此状态。到现在为止还挺好。
但是,我还希望我的组件根据此状态的当前值正确初始化。因此,一旦我订阅,我还希望发出当前值 - 例如,我的视图可以正确初始化。
使用 Angular 组件的示例:
my.component.ts
export class MyComponent implements OnInit {
constructor(private store: Store<State>) { }
// As soon as I subscribe, I want this to also emit the current
// value, e.g. so my view can correctly reflect the current state.
public mode$ = new Subject<ApplicationMode>();
ngOnInit() {
this.store.select(getApplicationState)
.select(s => s.applicationMode).subscribe(this.mode$);
}
}
Run Code Online (Sandbox Code Playgroud)
我的组件.html
{{ mode$ | async }}
Run Code Online (Sandbox Code Playgroud)
我相信我想要/期望的是我商店的这部分会返回 aBehaviorSubject或 a ReplaySubject(1)。但是从商店中选择任何东西总是会返回一个 …
我一定错过了一些微不足道的事情。我想这是我第一次遇到这种情况。
我ApplicationUser : IdentityUser用一些基本数据扩展了我的课程。其中一些是必需的,一些是可选的。简化摘录:
public class ApplicationUser : IdentityUser
{
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
[Column(TypeName = "Date")]
public DateTime? BirthDate { get; set; }
public string NationalNumber { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
请注意,FirstName和LastName是必需的,NationalNumber不是。BirthDate, 存在nullable, 也不是。这会产生以下自动生成的代码:
CreateTable(
"dbo.AspNetUsers",
c => new
{
Id = c.String(nullable: false, maxLength: 128),
UserName = c.String(),
PasswordHash = c.String(),
SecurityStamp = c.String(), …Run Code Online (Sandbox Code Playgroud)