展開プロセスをクリーンアップするために、移行を検討しています。変更を本番環境にプッシュするときに必要な手動介入が少ないほど、より良い結果が得られます。
移行システムで 3 つの大きな障害に遭遇しました。それらを回避するきれいな方法を見つけられない場合、それらはショーストッパーです。
1. 移行ごとにシード データを追加するにはどうすればよいですか。
「add-migration」コマンドを実行して、Up および Down 機能を備えた新しい移行ファイルを足場にします。ここで、Up と Down の両方の変更でデータを自動的に変更したいと考えています。シード データを Configuration.Seed メソッドに追加したくありません。これは、あらゆる種類の重複の問題で終了するすべての移行に対して実行されるためです。
2. 上記が不可能な場合、重複を避けるにはどうすればよいですか?
データベースに値を追加するためにループする列挙型があります。
foreach(var enumValue in Enum.GetValues(typeof(Access.Level)))
{
context.Access.AddOrUpdate(
new Access { AccessId = ((int)enumValue), Name = enumValue.ToString() }
);
}
context.SaveChanges();
AddOrUpdate を使用していますが、データベースに重複があります。上記のコードは、3番目の最後の問題に私をもたらします:
3. 主キーをシードするにはどうすればよいですか?
上記のコードで列挙可能なものは次のとおりです。
public class Access
{
public enum Level
{
None = 10,
Read = 20,
ReadWrite = 30
}
public int AccessId { get; set; }
public string Name { get; set; }
}
主キーとして必要な値を指定していますが、Entity Framework はそれを無視しているようです。それらはまだ 1,2,3 になります。10,20,30 にするにはどうすればよいですか?
現時点での EF のこれらの制限はありますか、それとも私が見ていない他の種類の大惨事を防ぐための意図的な制約ですか?