2009-06-03 24 views
0

我有一個由VS ORD生成的Linq to Sql模型,但我想對其進行更改以解決幾個問題。我可以更改designer.cs生成的代碼,但如果我需要在模型中重新創建表格,則將其刪除並將其拖回到ORD中。然而,這失去了我所有的定製。有另一種方法嗎?當表更改自定義時,將Linq重新創建爲Sql代碼

我已經看到參考sqlMetal.exe,但不知道如何使用它來解決這個問題。

的信息我的定製如下:

  1. 我使用Guid的,並希望該數據庫爲默認這些值,因此我想更改默認linqtosl行爲屬性[Column(IsDbGenerated= true)]添加到ID屬性。
  2. MVC的默認模型綁定不適用於集合(EntitySet<T>)。要解決這個問題,我需要稍微改變這些集合的setter。

這些變化都不是特別大,但我的數據庫可能會隨着時間的推移發生相當大的變化,我需要記住每次都要進行每次定製。

回答

0

我有這個相同的問題,希望看到一個答案出現在這裏,解決你提到的兩點。 (我發現了另一個解決方案,您的項目#2,雖然你的想法在部分使用OnCreated()似乎比我目前做的更好。)

我確實在最近跑過一篇文章(我將鏈接以下),這可能是實現這些目標的適用解決方案。本文描述了作者(1)如何使用SQLMetal生成一個dbml文件,(2)運行一個自定義進程來解析和修改這個dbml文件以滿足他的需要,然後(3)再次使用SQLMetal,這次進入修改dbml文件,以便生成代碼。對於小型項目/模式可能有很多工作,但我可以看到這對於大型項目來說可能是一個方便的解決方法。

這裏的鏈接:http://www.onedotnetway.com/enum-support-with-linq-to-sql-and-sqlmetal/

祝您好運! -Mike

+0

感謝Mike,看起來很有用,但認爲在嘗試這種方法之前,我會等待我的更改升級。與此同時,我認爲筆記本和手動更新將不得不做。 – Richbits 2009-06-11 14:16:08

1

這是what "partial" classes are all about。 L2SQL將實體類創建爲「部分」,因此即使重新創建實體模型,也不必編輯設計器生成的代碼。

+0

謝謝,雖然在這種特殊情況下,我可以看到我可以使用OnCreated()方法來解決我的EntitySet問題,但是如何設置Attribute:IsDbGenerated? – Richbits 2009-06-03 12:30:35

0

我已經踐踏了此路徑,唯一可靠的方法是從sqlmetal.exe/dbml路徑移開,並涉及像T4的LINQ to SQL模板這樣的自定義類生成器。

http://l2st4.codeplex.com/

你需要使用像這樣的原因是因爲你需要讓你的類生成拉從不同的來源自定義更改信息。我最終將自定義放入Dbml傳統使用的生成XML中。然後我修改了t4模板來吐出我需要的自定義類。

一個警告:這最終成爲一個完全噩夢實施,並被拋棄,以支持自定義更改的記事本文件。我們只需要根據需要燒掉它們。 IMO是Linq2SQL最薄弱的一點,也是我爲未來項目研究其他ORM的一個重要原因。

+0

謝謝,我想我會去買一臺筆記本:-) – Richbits 2009-06-11 14:16:59

相關問題