2014-04-22 121 views
1

情況:我有3個表:C#從多個表中刪除行

  • moviespk:movietitle, movielength ....等)
  • rentalspk:personid, fk:movietitle, ...等)
  • rentingpeoplepk+fk:personid, name, phone .. .etc)

在我的表單中有一個列表框綁定與電影標題,旁邊的列表框有文本框bindingsourc從db.movies

版當有人點擊rentthismovie按鈕,我想從表rentalsrentingpeople刪除那部電影目前租金數據。

我寫的第一部分,並得到因爲外鍵問題的錯誤(我提到的主鍵pk和外鍵如上表中fk

var search = (from g in db.Rentals 
       where g.Movietitle == (string)listBox1.SelectedValue select g).First(); 

db.Rentals.DeleteObject(search); 
db.SaveChanges(); 

我得到一個錯誤:

The DELETE statement conflicted with the REFERENCE constraint \"FK_Rentingpeople_Rentals\". The conflict occurred in database \"C:\USERS\PC\DOCUMENTS\VISUAL STUDIO 2010\PROJECTS\FILMEK\FILMEK\BIN\DEBUG\DATABASE1.MDF\", table \"dbo.Rentingpeople\", column 'personid'.\r\nThe statement has been terminated.

由於主外鍵連接,我必須從rentingpeople表中刪除數據,因爲我從這個錯誤中讀取,但我無法真正找到工作解決方案。

+0

你有任何其他的表,其中你保持人是「會員」,並可以租信息,比你'rentingpeople'表等? – Floremin

回答

0

在刪除對象本身之前,您需要刪除對要刪除的對象的所有PK引用和非空引用。
如果邏輯允許,您可以將不可空列更改爲可爲空的列。

var rentalsToBeDeleted = db.Rentals.Where(o =>o.movieid == movieid).ToList(); 
for (int i = rentalsToBeDeleted.count; i < 0; i--) 
{ 
db.Rentals.DeleteObject(rentalsToBeDeleted.elementAt(i)); 
} 

畢竟引用刪除。

db.SaveChanges(); 

寫入沒有VS,所以錯誤很可能,但你應該明白了。

+0

所有的東西都允許使用空值,但主鍵和外鍵。我找不到從連接到租金PERSONID誰不幸elementsat租所選的動畫 – user3551399

+0

和刪除rentingpeople刪除PERSONID的方式:不包含定義,沒有擴展方法... – user3551399

+0

添加到列表的結束db.Rentals.Where(o => o.movi​​eid == movieid).ToList(); –

2

的問題是在數據庫設計

movies(pk:movietitle,movielength....etc) 
rentals(pk:personid,fk:movietitle,...etc) 
rentingpeople(pk+fk:personid,name,phone...etc) 

如果我得到這個權利,movies包含電影列表,rentingpeople是誰在租用或租借,並且rentals軌道租賃人的名單。如果是這樣,rentingpeople.personid應該是一個PK,和rentals.personid應該是一個FK其他,像這樣:

  • 電影(PK:movietitle,movielength ....等)
  • 出租(FK:PERSONID,FK:movietitle,...等)
  • rentingpeople(PK:PERSONID,姓名,電話...等)

,如果你想提高租金(假定任何一個人搜索可以同時行使多個出租),您可以介紹在PERSONID一個非唯一索引,或者PERSONID複合唯一索引上表movietitle rentals

+0

我改變現在我得到的錯誤:無法更新EntitySet的「租賃」,因爲它有一個DefiningQuery並沒有元素在元素存在支持當前操作 – user3551399

+0

@ user3551399是否使用EF我認爲這是一個。?如果你需要在每個表中都有一個pk,如果是這樣的話,在租賃表中放一個PK,例如你可以使'PK(personid,movietitle) – Jason