2015-12-21 77 views
1

我已经生产出的控制台应用程序这节省了使用实体框架的数据,我有一个表,其被设计是这样的:防止重复被保存在数据库

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(); 
} 

但是什么都没有,无论添加如果表来比较,任何帮助存在什么?

+0

这应该是很容易的调试自己。只要检查if语句中的所有语句。可能类型不匹配或字符串中的大小写不同。无论哪种方式,你最好的人来解决这个问题,在这里可能很少有人能够帮助 – Liam

+2

只需让你的SQL数据库中的这些列是唯一的 – maksymiuk

回答

1

如果他们是null,您将需要检查每个字段。例如:

x.people_address != ppl.People_Address || x.people_adress == null 
0

该代码几乎没有问题。

首先,您不应该每次调用“db.tbl_people”属性获取器时多次导致数据库。做一次,不检索整个数据库集合。

其次,对于空数据库

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(); 
} 

此代码将生成的查询将返回只标量,这将是更好的性能和通信信道的数据库。

0

的问题是条件

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 
}