防止重复项保存在数据库中
本文关键字:存在 数据库 保存 | 更新日期: 2023-09-27 18:27:33
我制作了一个控制台应用程序,它使用实体框架保存数据,我有一个设计如下的表:
ID People_ID People_Address People_Postcode
--- ---------- -------------- ----------------
1 2 76 Nation Road B27 8NT
2 7 88 Grimestone Road B45 9WG
3 12 45 Wallock Road B22 4UI
为了确保重复项不会存储在表中,已编写以下代码:
ppl.People_Address = Address;
ppl.People_Postcode = Postcode;
ppl.People_ID = usr.ID;
If(db.tbl_people.Any(x=> x.people_address != ppl.People_Address) && (db.tbl_people.Any(x=> x.people_postcode != ppl.People_Postcode) && (db.tbl_people.Any(x=> x.People_ID != ppl.People_ID) {
db.tbl_people.Add(ppl)
db.SaveChanges();
}
然而,无论表中是否没有可供比较的内容,都不会添加任何内容,有什么帮助吗??
您需要检查每个字段是否为null
。例如:
x.people_address != ppl.People_Address || x.people_adress == null
问题在于条件
if (db.tbl_people.Any(x=> x.people_address != ppl.People_Address)
&& (db.tbl_people.Any(x=> x.people_postcode != ppl.People_Postcode)
&& (db.tbl_people.Any(x=> x.People_ID != ppl.People_ID)
它真的应该是
if (!db.tbl_People.Any(x => x.people_address == ppl.People_Address
&& x.people_postcode == ppl.People_Postcode
&& x.People_ID == ppl.People_ID))
{
// No duplicate
}
此代码几乎没有问题。
首先,每次调用"db.tbl_public"属性getter时,不应多次导致数据库崩溃。只做一次,不要检索整个数据库集合。
第二,对于空数据库
db.tbl_people.Any(x=> x.people_address != ppl.People_Address)
返回false,因为tbl_people集合中没有实体。
第三,你的条件是没有真正检查数据库中的重复项。
您的查询可能看起来像下面的代码:
// if there is no entities with same properties
if(db.tbl_people.Count(p => p.people_address == ppl.People_Address
&& p.people_postcode == ppl.People_postcode
&& p.People_ID == ppl.People_ID) == 0)
{
// then save new entity
db.tbl_people.Add(ppl)
db.SaveChanges();
}
这段代码将生成对数据库的查询,数据库将只返回标量变量,这将对性能和通信通道更好。