Asp.Net MVCプロジェクトを起動して実行しており、モデルが変更されたときに、タイプの1つのプロパティを除いて、データベースに必要なすべてのデータをシードできますList<string>
。
問題をよりよく示すために、そのテストケースを分離しました。
私が単純なPerson
モデルを持っているとしましょう:
class Person
{
public string Firstname { get; set; }
public string Lastname { get; set; }
public List<string> Children { get; set; }
public string ToString()
{
string children = "";
if (Children != null)
{
children = String.Join(" - ", Children.ToArray());
}
else
{
children = "none";
}
return Firstname + " " + Lastname + " -> " + children;
}
}
このモデルを外部コンソールアプリケーションで使用すると、そのすべてのメンバーを初期化できます。
class Program
{
static void Main(string[] args)
{
List<Person> myList = new List<Person> {
new Person { Firstname = "John", Lastname = "Doe", Children = new List<string> { "Bob", "Monica" }},
new Person { Firstname = "Bob", Lastname = "Doe", Children = new List<string> { "Jack", "John II" }},
new Person { Firstname = "Monica", Lastname = "Doe", Children = new List<string> { "Sue", "Mark" }}
};
// output the list to screen
myList.ForEach(p => Console.WriteLine(p.ToString()));
}
}
その場合、出力は期待どおりになります。
John Doe -> Bob - Monica
Bob Doe -> Jack - John II
Monica Doe -> Sue - Mark
しかし、同じデータをデータベースにシードしようとすると、Children
メンバーはnull
!
これが私がそれをやろうとしている方法です:
public class MySeedData : DropCreateDatabaseIfModelChanges<MyDataBaseContextClass>
{
protected override void Seed(MyDataBaseContextClass context)
{
List<Person> myList = new List<Person> {
new Person { Firstname = "John", Lastname = "Doe", Children = new List<string> { "Bob", "Monica" }},
new Person { Firstname = "Bob", Lastname = "Doe", Children = new List<string> { "Jack", "John II" }},
new Person { Firstname = "Monica", Lastname = "Doe", Children = new List<string> { "Sue", "Mark" }}
};
myList.ForEach(p => context.Persons.Add(p));
}
}
私はさまざまな構築パターンを試しましたが、Children
メンバーがnull
自分のビューの1つでそれにアクセスしようとするたびに。
現時点では、このメンバーがnullでないことがわかった唯一の方法は、Person
クラスのデフォルトコンストラクターでリストを初期化することです...
Children
では、このメンバーに、個人ごとに異なる値を使用してデータをシードするにはどうすればよいですか?