C# 实体框架:如何从数据库表中不存在的列表中插入数据
我正在从C# 实体框架:如何从数据库表中不存在的列表中插入数据,c#,entity-framework,C#,Entity Framework,我正在从列表框中获取数据,并将其插入数据库。 在插入数据之前,我需要确保列表框中的数据在数据库中不存在。简而言之,只插入与数据库中的行不匹配的行。下表举例 数据插入代码: private void InsertList() { var listA=新列表(); var listB=新列表(); //通过拆分列表框中的项目来填充这两个列表 foreach(ListBox1.Items中的ListItem项) { var组件=item.Value.Split('/'); 添加(components.
列表框中获取数据,并将其插入数据库。
在插入数据之前,我需要确保列表框中的数据在数据库中不存在。简而言之,只插入与数据库中的行不匹配的行。下表举例
数据插入代码:
private void InsertList()
{
var listA=新列表();
var listB=新列表();
//通过拆分列表框中的项目来填充这两个列表
foreach(ListBox1.Items中的ListItem项)
{
var组件=item.Value.Split('/');
添加(components.First());
添加(components.Last());
}
使用(DataContext=newdatacontext())
{
对于(变量i=0;i
示例表:
在下表中,如果高亮显示的数据存在于列表中,则不会插入,因为它已经在数据库中
谢谢我的朋友:考虑到这是一个有点长的条件(它不适合一行):
哪个属性是数据库中已经存在的内容的主键或唯一标识符?LIST\u ITEM\u A
和LIST\u ITEM\u B
都是主键(复合键)。我可以通过添加if语句来实现这一点:if(dataContext.LIST\u OBJECTS.Where(l=>l.LIST\u ITEM\u A==listA[I]&&l.LIST\u ITEM\u B==listB[I])。First()=null{\\insert}您知道如果我试图在声明中添加语句,为什么我无法引用listObject
?对象超出范围。因为我搞错了,而且我现在不在编译器面前;)一秒钟谢谢你的编辑建议@Peyman,如果这是一个好建议的话,它只是在编辑冲突解决方案中丢失了。对不起,拖拉:我对实体框架相对来说比较陌生。我仍然在exits方法上出错。例如:ctx没有包含任何的定义。
我还对字符串参数a
和b
如何能够公开“列表项”a和b感到困惑。再次感谢!那很好,这是我的另一个错误。我相信现在已经纠正了。
private void InsertList()
{
var listA = new List<string>();
var listB = new List<string>();
//Populate both list by splitting items in listbox
foreach (ListItem item in ListBox1.Items)
{
var components = item.Value.Split('/');
listA.Add(components.First());
listB.Add(components.Last());
}
using (DataContext dataContext = new DataContext())
{
for (var i = 0; i < listA.Count; i++)
{
LIST_OBJECTS listObject = new LIST_OBJECTS
{
// Need to check data does not already exists in DB before adding.
LIST_KEY = 1,
LIST_ITEM_A = listA[i],
LIST_ITEM_B = listB[i]
};
dataContext.LIST_OBJECTS.Add(listObject);
}
dataContext.SaveChanges();
}
}
for (var i = 0; i < listA.Count; i++)
{
if (!exists(dataContext, listA[i], listB[i]))
{
LIST_OBJECTS listObject = new LIST_OBJECTS
{
LIST_KEY = 1,
LIST_ITEM_A = listA[i],
LIST_ITEM_B = listB[i]
};
dataContext.LIST_OBJECTS.Add(listObject);
}
}
dataContext.SaveChanges();
private bool exists(DataContext ctx, string a, string b)
{
return ctx.LIST_OBJECTS.Any(i => i.LIST_ITEM_A == a
&& i => i.LIST_ITEM_B == b);
}