我有一个 Asp.Net MVC 项目启动并运行,当我的模型发生更改时,我可以将我想要的所有数据播种到数据库中,除了一个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
目前,我发现让这个成员不为空的唯一方法是在Person
类的默认构造函数中初始化列表......
那么如何Children
为每个人提供不同值的数据给这个成员呢?