エンティティフレームワークシード機能は、すべてのデータをデータベースに挿入しませんでした
-
25-10-2019 - |
質問
DropreatedatabaseifModelChangesから継承するクラスがあります。
public class SetupData : DropCreateDatabaseIfModelChanges<CyclingClubContext>
{
protected override void Seed(CyclingClubContext context)
{
var _CycleType = new List<CycleType>
{
new CycleType { Type = "Leisure Cycle Type A" },
new CycleType { Type = "Mountain Bike Type A" },
new CycleType { Type = "Racer" },
new CycleType { Type = "Leisure Cycle Type B" },
new CycleType { Type = "Mountain Bike Type B" }
};
new List<CycleModel>
{
new CycleModel{ Model = "Challenge 26in", CycleType = _CycleType.Single(r => r.Type == "Racer") },
new CycleModel{ Model = "Challenge 27in", CycleType = _CycleType.Single(r => r.Type == "Racer") },
new CycleModel{ Model = "Muddy Fox Vortex", CycleType = _CycleType.Single(r => r.Type == "Leisure Cycle Type A") },
new CycleModel{ Model = "Laser 8", CycleType = _CycleType.Single(r => r.Type == "Leisure Cycle Type B") },
new CycleModel{ Model = "Silverfox 26in", CycleType = _CycleType.Single(r => r.Type == "Mountain Bike Type B") }
}.ForEach(IndividualRow => context.CycleModel.Add(IndividualRow));
}
}
このクラスを実行した後、私はそれを見つけました...
作成された2つのテーブル。
1)サイクルモデル(すべての行が正しく挿入)。
2)サイクルタイプ(挿入する1行の左)[問題]。
マウンテンバイクタイプAは、テーブルサイクタイプへの挿入ではありません。
私は自分のコードを変更する必要があると思いますが、どうすればできるのかわかりません。
私の問題を解決できるように、以下のように別の行を挿入したくありません。
new CycleModel{ Model = "Testing...", CycleType = _CycleType.Single(r => r.Type == "Mountain Bike Type A") }
提案をさせてください。
解決
Seed()メソッドはaで終了する必要があります context.SaveChanges()
.
現状では、奇妙なことは何でも保存されています。
しかし、「マウンテンバイクタイプA」がどのサイクルモデルも参照されていないことは明らかであり、それが除外されている理由です。
おそらくそれを修正することができます
_CycleType.ForEach(IndividualRow => context.CycleType.Add(IndividualRow));
他のヒント
あなたは追加するだけです CycleModel
sコンテキストに。あなたが追加するとき CycleModel
EFは、関連するすべてのエンティティを追加します CycleModel
インスタンスを参照してください。ここにリストがあります CycleModel
コンテキストに追加されたsは、 CycleType
「マウンテンバイクタイプA」。したがって、追加されていません。
すべてを追加できます CycleType
s最初。
var _CycleType = new List<CycleType>
{
new CycleType { Type = "Leisure Cycle Type A" },
new CycleType { Type = "Mountain Bike Type A" },
new CycleType { Type = "Racer" },
new CycleType { Type = "Leisure Cycle Type B" },
new CycleType { Type = "Mountain Bike Type B" }
}.ForEach(c => context.CycleType.Add(c));
または、そのインスタンスを個別に追加することもできます。
context.CycleType.Add(_CycleType.Single(r => r.Type == "Mountain Bike Type A"));
所属していません StackOverflow