0

開発データベースのシード データを追加しています。私が持っているものはかなり不格好に思えます.これを簡単にするために、Listやおそらくコレクションなどのある種のIEnumerable型を使用する方法はありますか?

public class MusicDBInit : DropCreateDatabaseIfModelChanges<MusicContext>
{
    protected override void Seed(MusicContext db)
    {
        Band bvs = new Band { Name = "Bear vs Shark", Members = 4 };
        Band circa = new Band { Name = "Circa Survive", Members = 4 };
        Band dam = new Band { Name = "Damiera", Members = 3 };

        db.Bands.Add(bvs);
        db.Bands.Add(circa);
        db.Bands.Add(dam);

        base.Seed(db);
    }
}
4

2 に答える 2

1

私が通常従う別の方法は、XML ファイルからシード データをロードすることです。別のクラスは次のものを保持します。

    private XmlNodeList readNodes(String xmlFilePath, String nodeName)
    {
        FileStream reader = new FileStream(xmlFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
        System.Xml.XmlDocument source = new System.Xml.XmlDocument();
        source.Load(reader);
        return source.GetElementsByTagName(nodeName);
    }

    public List<Band> readBands(String xmlFilePath)
    {
        List<Band> results = new List<Band>();
        foreach (XmlNode node in readNodes(xmlFilePath, "Band"))
        {
            results.Add(new Band { Members = node.Attributes["members"].Value, Name = node.Attributes["name"].Value });
        }
        results.Sort();
        return results;
    }

Seed次に、以下をメソッドに追加します。

    foreach (Band b in seeder.readBands(AppDomain.CurrentDomain.BaseDirectory + "App_Data\\Bands.xml"))
    {
        db.bands.Add(b);
    }

XML は次のようになり、App_Data ディレクトリの下に配置されます。

<?xml version="1.0" encoding="UTF-8"?>
<bands>
    <band name="Bear vs Shark" members="4" />
    <band name="Circa Survive" members="4" />
    <band name="Damiera" members="3" />
</bands>

その後、シードするすべてのテーブルに対してシード メソッドと XML ファイルを作成できます。そして、実行するたびに重複を追加する可能性が最も高いのでAddはなく、使用しているため、覚えておいてください。AddOrUpdateSeed

于 2012-06-03T14:03:53.940 に答える
1

このようなことを試してください(で行われたようにOnline Music Store MVC Sample

 var bands = new List<Band>{
                     new Band { Name = "Bear vs Shark", Members = 4 },
                     new Band { Name = "Circa Survive", Members = 4 },
                     new Band { Name = "Damiera", Members = 3 }
 };


bands.ForEach(x=> db.Bands.Add(x));
于 2012-06-03T12:11:01.283 に答える