エンティティフレームワークシード機能は、すべてのデータをデータベースに挿入しませんでした

StackOverflow https://stackoverflow.com/questions/8801901

質問

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));

他のヒント

あなたは追加するだけです CycleModelsコンテキストに。あなたが追加するとき CycleModel EFは、関連するすべてのエンティティを追加します CycleModel インスタンスを参照してください。ここにリストがあります CycleModelコンテキストに追加されたsは、 CycleType 「マウンテンバイクタイプA」。したがって、追加されていません。

すべてを追加できます CycleTypes最初。

    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"));
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top