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之类的事情。

Linq到SQL数据库管理

  1. 在你的条目列表中创建一个包含所有不同名称的列表。
  2. 创建一个查询,从Users表中提取所有值,这些值的名称可以在您刚刚创建的列表中找到。将这些值放入字典中,并按其名称键入。
  3. 循环您想要插入的条目,对于每个条目,要么将它们与您创建的字典中的值相关联,要么创建一个新值并将其添加到字典中。

对于任意数量的新条目,这应该满足您的要求,在总共两次往返中