我有这堂课:
public class Course
{
public String Name { set; get; }
public int Code { set; get; }
public List<String> PreRequireCources = new List<String>();
}
和PreRequireCources
列表由这样的列表框填充:
Course cu = new Course();
cu.Name = txtName.Text;
cu.Code = Convert.ToInt32(txtCode.Text);
cu.PreRequireCources= lstPreRequirsist.Items
.Cast<string>().ToList();
这是我的课程表:
如果我这样做,我会收到错误,因为PreRequireCources
是List
,但数据库列是ntext
:
var db = new LinqDataContext();
db.Cources.InsertOnSubmit(cc);
那么如何将此列表保存到我的数据库中?有没有更好的方法将这个列表保存到每个学生的数据库中? 感谢。
答案 0 :(得分:0)
有两种选择:
您可以将Course
课程更改为:
public class Course
{
public String Name { set; get; }
public int Code { set; get; }
public String PreRequireCources = string.Empty;
}
并从列表框中填充,如下所示:
cu.PreRequireCources = string.Join(",", lstPreRequirsist.Items.
Cast<string>());
通过这种方式,您可以将这些课程存储为,
列中的PreRequire
分隔列表。
注意这不是存储此类数据的好方法。 Course
和PreRequireCources
之间似乎存在mxn关系,所以......
解决此问题的更好方法是创建一个名为PreRequiredCoursesToCourses
的表格。让我们说你有这些课程
Code Name PreRequireCourses
1 Course1 Course2, Course3
2 Course2 Course3
3 Course3
然后从该表中删除PreRequireCourses
并构建一个交叉表:
CourseCode PreRequiredCode
=============================
1 2
1 3
2 3
这使您的数据设计更加高效和灵活。存储必须再次解析的字符串以找出所需的课程并不是一个好主意。
如果您想稍后要求提供相关信息,现在可以使用JOIN
获取课程预先要求的所有课程。
答案 1 :(得分:0)
您正在尝试将值列表插入到需要单个文本值的列中。因此,您可以将列表中的所有字符串连接成一个字符串
cu.PreRequireCources= String.join(", ",lstPreRequirsist.Items
.Cast<string>().ToList());
用分隔符替换“,”。
答案 2 :(得分:0)
您可以将List
作为未映射的属性,并使另一个string
列映射。
然后您可以序列化您的列表,例如,使用Newtonsoft.Json
:
public class Course
{
public String Name { set; get; }
public int Code { set; get; }
// Mapped to column "PreRequire"
public String PreRequire {
get {
return JsonConvert.SerializeObject(PreRequireCources);
}
set {
PreRequireCources = JsonConvert.DeserializeObject<List<string>>(value);
}
}
// Not mapped to any column
public List<String> PreRequireCources = new List<String>();
}