2015-12-21 53 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 
}