2009-09-24 60 views
1

根據這篇文章: http://subsonicproject.com/docs/3.0_Migrations你如何處理SubSonic與遷移的「關係」?

Bottom line: if you're a developer that is concerned about database design, 
migrations might not be for you. 

好吧,這很好,我可以把數據庫作爲數據簡單的持久存儲庫不包含任何業務邏輯。換句話說,一個榮耀的文本文件。

我不知道該怎麼做是將兩個對象聯繫在一起。舉個例子,這兩個類:

public class Disaster 
{ 
    public int DisasterId { get; set; } 
    public string Name { get; set; } 
    public DateTime? Date { get; set; } 
    public IList<Address> Addresses { get; set; } 
} 

public class Address 
{ 
    public int AddressId { get; set; } 
    public string WholeAddressHereForSakeOfBrevity { get; set; } 
} 

Disaster包含多個AddressesIList的災難都打的。當我使用SimpleRepository將這些添加到數據庫SimpleRepositoryOptions.RunMigrations時,它會生成包含所有列的表,但不包含所需的外鍵列。

我會如何將這兩者聯繫起來,以便當我撥打Disaster.Addresses時,我會得到所有受影響Addresses的列表?這是可能的還是我必須改用ActiveRecord並首先創建數據庫表?或者,我是否必須將災難ID的列添加到Address?如果是這樣,這種方法對於多對多關係如何工作?

回答

1

這是可能的 - 你只需要手工完成。將屬性添加到名爲「Addresses」的Disaster中,並將其設置爲IList(或者,如果您希望將其設置爲Lazy Load,則可以將其設置爲IQueryable)。當您檢索災難時,請務必檢索您的地址。

這是一種「手動」 - 但這就是主意。我正在對此進行增強,希望能夠在以後的版本中推出。

而之前,你問爲什麼我沒有這樣做的第一個地方:)這是因爲我不知道是否應該使用基於父母/子女關係的多對多或一對多。在你的例子中,我想這可能是1對多,但根據我所知道的地址和災難(特別是在佛羅里達州),它應該是多對多的。底線 - SubSonic如何知道這一點?我們可以反思這兩個對象的「雙向性」,這意味着如果Address有很多災難(這是顯而易見的) - 但是如果你喜歡DDD,那麼編碼就不是很好。

我傾向於這種規則與某種類型的覆蓋,將迫使問題。你對此的看法是歡迎的:)

+0

正如你可以在我原來的文章中提供的代碼中看到的,我沒有添加IList(我現在已經轉換爲IQueryable,因爲我想延遲加載)到Disaster類。不過,我不確定你的意思是「只要確保找回你的地址」。如果這個關聯沒有存儲在數據庫中,我怎麼知道要檢索哪個地址? – 2009-09-24 01:51:04

+0

如果它在數據庫中沒有關係...那麼你有點迷失在我的那裏。如果它在另一個系統中,那麼在你需要時調用它。 – 2009-09-29 18:30:15