我有在数据库中插入记录的函数。我想确保数据库中没有重复的条目。函数首先检查是否存在查询字符串参数。如果有,那么它的作用类似于编辑模式,否则插入模式。有一个函数可以返回数据库中当前添加的记录。在插入数据库之前,我需要根据两列检查重复项。
myService = new myService();
myFlow mf = new myFlow();
if (!string.IsNullOrEmpty(Request["myflowid"]))
{
mf = myService.Getmyflow(Convert.ToInt32(Request["myflowid"]));
}
int workcount = 0;
int.TryParse(txtWorkCount.Text, out workcount);
mf.Name = txtName.Text.Trim();
mf.Description = txtDescription.Text.Trim();
mf.FunctionCode = txtFunctioneCode.Text.Trim();
mf.FunctionType = txtFunctioneType.Text.Trim();
mf.WorkCount = workcount;
if (mf.WorkFlowId == 0)
{
mf.SortOrder = 0;
mf.Active = true;
mf.RecordDateTime = DateTime.Now;
message = "Saved Successfully";
}
else
{
_editMode = true;
message = "Update Successfully";
}
}
int myflowId = mfService.AddEditmyflow(mf);
我想根据functiontype
和functioncode
检查重复。另一个函数mfService.Getmyflows()
可以返回数据库中当前添加的记录。
如何使用 Linq 检查重复项?
首先,您使用什么数据库?许多数据库支持 upsert 行为(根据是否找到数据进行更新或插入(。例如,MERGE
在ms sql中,MERGE
在oracle中,INSERT .. ON DUPLICATE
在mysql中等等。这可能是首选解决方案。更新插入通常是一个原子操作。
在您的特定情况下,您是否进行交易?您确定在您确保重复项之后但在您插入记录之前没有人会插入数据吗?例:
#1 thread #2 thread
look for duplicates
... look for duplicate
no duplicates found ...
no duplicates found
insert data_1
insert data_1
这最终会导致您试图避免的重复
。根据您的代码,您从 GUI 填充数据并仅添加一个项目。
如果您有权访问myService
代码,则可以添加方法以按两列查询项,而不是通过mfService.Getmyflows()
查询所有项并在代码中查看此集合。它将提高性能(特别是如果您在该列中有索引(和更高的内存效率。
最后,集合中单个元素的存在可以很容易地完成:
var alreadyExist = mfService.Getmyflows()
.Any(x => x.Column1 == value1 && x.Column2 == value2);