Linq到SQL数据库管理
本文关键字:管理 数据库 SQL Linq | 更新日期: 2023-09-27 17:54:08
所以我有一个真正的问题。我想添加一个外键的行,我添加到数据库。我已经设置好了所有的参考,所以它们都映射得很好。
问题是,我想添加键而不运行查询,直到所有行提交。
示例表
**FirstNameTable** **LastNameTable** **People-Table**
Id | Value Id | Value Id | FirstNameID | LastNameID
---------------- --------------- ------------------------------
1 | Jeff 1 | jones 1 | 1 | 3
2 | Joe 2 | Richards 2 | 2 | 1
3 | John 3 | bobson 3 | 3 | 2
所以Table3有3个外键(FirstNameId链接到FirstNameTable, LastNameId链接到lastnametable, ParentId链接到People-Table)。对于这个例子,我们假设永远不会有一个人有相同的姓和名。
我想为表3添加一个新条目,但我希望它要么使用现有的条目,如果它存在或创建一个新的。
现在做People-Tabletb3 = new People-Table()
{
FirstNameTable = new FirstNameTable(){ Value = Jeff};
LastNameTable= new LastNameTable(){ Value = jones};
}
总是在另外两个表中创建一个新条目。对每个表
中的每一行执行以下操作if ((from u in dc.Users where u.Name == name select u).Count() > 0)
// just grab the id
else
// make it then grab the id
不是一个真正的选择,因为你会做更多的查询和减慢上传。
所以我的问题是如何使用LINQ创建一个新的People-Table行,该行将使用现有的姓和名或创建一个新的,如果它不存在。不需要做if-else之类的事情。
- 在你的条目列表中创建一个包含所有不同名称的列表。
- 创建一个查询,从Users表中提取所有值,这些值的名称可以在您刚刚创建的列表中找到。将这些值放入字典中,并按其名称键入。
- 循环您想要插入的条目,对于每个条目,要么将它们与您创建的字典中的值相关联,要么创建一个新值并将其添加到字典中。
对于任意数量的新条目,这应该满足您的要求,在总共两次往返中