2010-07-27 40 views
1

我有兩個類:更新數據庫N:N

public class RichMan 
{ 

public string ID {get;set;} 
List<Car> _cars=new List<Car>(); 
{ 
    public List<Car> Cars 
    { 
    get 
       { 
        return this._cars; 
       } 
       set 
       { 
        this._cars = value; 
        NotifyChanged("Email"); 
       } 

    } 

}

public class Car 
{ 
public string ID {get;set;} 
} 

而且3個表:

RichMan 
ID int 

Cars: 
ID int 

and CarsOfRichmen 

idcar int (FK) 
idrichman (FK) 

如果richamn的汽車收藏會改變如何在數據庫上做到這一點?

從CarsOfRichmen中刪除所有記錄,其中idrichman是我的richam的id,然後在foreach中將實現添加到CarsOfRichmen?

是不是很好的做法?

回答

3

不,這不是一個好習慣。

汽車可以有其他鏈接信息; Cars中的變化可能會觸發其他操作。

你必須只添加/刪除/更新相關的汽車[編輯]和/或CarsOfRichmen ...

+0

當一些富人賣掉他的汽車時,我不想在桌上汽車裏換車。 – user278618 2010-07-27 06:44:44

2

至少有3種類型,我知道在這裏:

1)按帕斯卡爾 - 分析'之前'和之後的情景,然後根據需要將相關的增量應用於鏈接的數據(插入,更新和刪除)。

2)根據您的建議刪除鏈接(但不是汽車)是相當普遍的模式。但是,您應該擁有某種形式的日誌/審計功能,以便您可以重新創建發生的事情。

3)另一種常見模式是在鏈接上添加一個日期從/日期到範圍,並以這種方式進行版本管理。然而,由於鏈接速度很快,性能可能會下降。

+0

我不得不在這幾次做變化,我想你已經涵蓋了可能性。 (1)通常太難了。 (2)是我通常最終得到的。 (3)可能使您的所有查詢變得更加複雜。人們可以通過僅選擇「活動」行並將其用作鏈接表的視圖來實現此目的;這可以節省查詢的所有困難。 – 2010-07-27 07:16:01