gpt4 book ai didi

c# - 如何将数据播种到 List 模型成员?

转载 作者:行者123 更新时间:2023-11-30 17:09:24 25 4
gpt4 key购买 nike

我有一个正在运行的 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每当我尝试在我的一个 View 中访问它时。

目前,我发现让这个成员不为空的唯一方法是在 Person 的默认构造函数中初始化列表。类...

那么我怎样才能将数据播种到这个 Children 中呢?每个人的值(value)观不同?

最佳答案

问题是 EF 不支持标量集合。换句话说,Code First 不会映射您的 Children 属性,因为它不知道如何处理 List。

解决此问题的一种方法是为列表中的项目定义一个实体类型,然后改用它。例如:

public class Person
{
public int Id { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
public virtual List<Child> Children { get; set; }
// Your other code
}

public class Child
{
public int Id { get; set; }
public string Name { get; set; }
}

您的 Child 类(class)的形状可能会有所不同,具体取决于它的具体使用方式,这在问题中并不清楚。我还添加了属性作为键,因为 EF 要求每个实体类型都有一个键;你可能想再次改变这一点。最后,我将该属性设置为虚拟属性,以便在需要时延迟加载。

关于c# - 如何将数据播种到 List<String> 模型成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12972497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com