C# 插入一个列表<;字符串>;使用Linq to sql访问ntext字段
我有这门课:C# 插入一个列表<;字符串>;使用Linq to sql访问ntext字段,c#,database,linq,list,C#,Database,Linq,List,我有这门课: public class Course { public String Name { set; get; } public int Code { set; get; } public List<String> PreRequireCources = new List<String>(); } 这是我的课程表: 如果我这样做,我会得到一个错误,因为prerequireresources是一个列表,但数据库列是一个ntext: var
public class Course
{
public String Name { set; get; }
public int Code { set; get; }
public List<String> PreRequireCources = new List<String>();
}
这是我的课程表:
如果我这样做,我会得到一个错误,因为prerequireresources
是一个列表
,但数据库列是一个ntext
:
var db = new LinqDataContext();
db.Cources.InsertOnSubmit(cc);
那么,如何将此列表保存到我的数据库中?是否有更好的方法将此列表保存到每个学生的数据库中?谢谢。有两种选择: 1.将字符串压缩为一个字符串(不太好) 您可以将
课程
课程更改为:
public class Course
{
public String Name { set; get; }
public int Code { set; get; }
public String PreRequireCources = string.Empty;
}
然后从列表框中按如下方式填充:
Course cu = new Course();
cu.Name = txtName.Text;
cu.Code = Convert.ToInt32(txtCode.Text);
cu.PreRequireCources= lstPreRequirsist.Items
.Cast<string>().ToList();
cu.PreRequireCources = string.Join(",", lstPreRequirsist.Items.
Cast<string>());
然后从该表中删除prerequiresources
,并构建一个交叉表:
CourseCode PreRequiredCode
=============================
1 2
1 3
2 3
这使您的数据设计更加高效和灵活。存储您必须再次解析的字符串以确定哪些课程是必需的,这不是一个好主意
如果您想稍后请求信息,现在可以使用
JOIN
获取课程所需的所有课程。您正在尝试将值列表插入到需要单个文本值的列中。因此,您可以将列表中的所有字符串合并为一个字符串
cu.PreRequireCources= String.join(", ",lstPreRequirsist.Items
.Cast<string>().ToList());
cu.prerequiresources=String.join(“,”,lstprerequirersist.Items
.Cast().ToList());
将“,”替换为分隔符。您可以将
列表作为未映射属性,并拥有另一个映射的字符串
列
然后可以序列化列表,例如,使用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>();
}
公共课
{
公共字符串名称{set;get;}
公共整数代码{set;get;}
//映射到列“PreRequire”
公共字符串预要求{
得到{
返回JsonConvert.SerializeObject(PrerequireResources);
}
设置{
PrerequireResources=JsonConvert.DeserializeObject(值);
}
}
//未映射到任何列
公共列表PrerequireResources=新列表();
}
您必须为PrerequireResources创建一个单独的表,它可以有3列Id、PrerequireResourceString和CourseCodeTip:切勿在单个字段中存储多值项。这是一场噩梦,以后要维持下去。最好使用第二个表RequiredCourse
,该表有两个外键:一个FK指向有必修课的课程,另一个FK指向必修课的课程。
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>();
}