我在我的數據庫中有一個表,我想用getter和setter創建一個模型類。對於我的項目中的大部分任務,我正在使用PetaPoco。我手動創建模型,但很少有表格有很多列。如何使用PetaPoco庫自動創建數據庫模型?
有什麼方法可以使用PetaPoco從數據庫創建模型?
我在我的數據庫中有一個表,我想用getter和setter創建一個模型類。對於我的項目中的大部分任務,我正在使用PetaPoco。我手動創建模型,但很少有表格有很多列。如何使用PetaPoco庫自動創建數據庫模型?
有什麼方法可以使用PetaPoco從數據庫創建模型?
PetaPoco有T4 Visual Studio模板應該爲你做這個。如果您不想讓它們全部生成,只需使用該模板,然後從所需的* .cs文件中複製這些類。
您會在PetaPoco's GitHub code repo上找到模板。
模板添加到您的項目可以通過兩種方式來完成:
我會推薦第二個選項,因爲您可以在構建之前將它們設置爲自動下載時(CVS的一部分)。
我使用了爲我生成DAL的Database.tt。從該列表中選擇哪一個用於創建表格類? – RKh 2012-04-17 07:22:59
@RPK:你從那個list_中得到什麼意思?什麼名單?默認情況下,它應該生成數據庫類和模式類。據我所知。我自己編寫手動POCO,但通過快速瀏覽模板,應該生成表類並將其包含在生成的'Database.cs'文件中。 – 2012-04-17 07:45:53
在列表中,我的意思是你給我的鏈接中顯示的.tt。我也手動編寫POCO,但我想用T4添加一個。哪個T4模板可以運行?它會干擾現有的POCO嗎? – RKh 2012-04-17 08:33:48
我強烈建議您使用T4模板,因爲它可以使流程更加快速以及添加其他功能。
的最快方法是打開「包管理器控制檯」(工具>庫包管理器>包管理器控制檯),請確保您的項目在「默認項目」選擇下拉菜單和運行:
PM>install-package petapoco
這將創建一個名爲「Models」的文件夾和一個名爲「Generated」的子文件夾。在「生成」文件夾中,打開「Database.tt」文件並設置信息。有關設置的信息,請參閱http://www.toptensoftware.com/petapoco/。
成功設置T4模板後,它將生成一個名爲「Database.cs」的代碼文件,其中包含數據庫中的所有對象。產生的是「部分班級」。這裏的關鍵是你不應該修改這個文件中的任何對象。相反,您將在相同的名稱空間中創建一個新的部分類,然後您可以實現更多的邏輯。移動/更新您的現有對象以確認新的設置。
另一種選擇是創建一些TSQL來生成一些代碼。這是一個非常粗糙的例子,我過去用它來爲我的PetaPoco表生成接口。
declare @script nvarchar(max);
declare @table nvarchar(256);
set @table = 'YourTableName'
set @script = 'public interface I' + @table + '{' + char(10);
SELECT
@script = @script +
CASE
WHEN st.Name IN ('int') AND c.is_nullable = 0 THEN 'int'
WHEN st.name in ('smallint') AND c.is_nullable = 0 THEN 'short'
WHEN st.name IN ('bigint') AND c.is_nullable = 0 THEN 'long'
WHEN st.name IN ('varchar','nvarchar','sysname') THEN 'string'
WHEN st.Name IN ('datetime') AND c.is_nullable = 0 THEN 'DateTime'
WHEN st.Name IN ('bit') AND c.is_nullable = 0 THEN 'bool'
WHEN st.Name IN ('decimal') AND c.is_nullable = 0 THEN 'decimal'
/* NULLABLE VALUES */
WHEN st.Name IN ('int') AND c.is_nullable = 1 THEN 'int?'
WHEN st.name in ('smallint') AND c.is_nullable = 1 THEN 'short?'
WHEN st.name IN ('bigint') AND c.is_nullable = 1 THEN 'long?'
WHEN st.name IN ('varchar','nvarchar','sysname') AND c.is_nullable = 1 THEN 'string?'
WHEN st.Name IN ('datetime') AND c.is_nullable = 1 THEN 'DateTime?'
WHEN st.Name IN ('bit') AND c.is_nullable = 1 THEN 'bool?'
WHEN st.Name IN ('decimal') AND c.is_nullable = 1 THEN 'decimal?'
--WHEN st.name IN('sysname') AND c.is_nullable = 1 THEN 'string?'
ELSE 'UNKOWN-' + st.name
END
+ ' ' + c.name + '{get;set;}' + char(10)
FROM sys.tables t
INNER JOIN sys.columns c
ON t.object_id = c.object_id
INNER JOIN sys.types st
ON st.system_type_id = c.system_type_id
WHERE t.name = @table
print @script + '}'
我希望這有助於。
在Visual Studio中,您可以使用集成的Entity Framework的「Code first from database」函數來生成POCO類,以便與PetaPoco一起使用。只需生成它們並刪除所有不必要的EF垃圾桶,如DBContext和屬性。通過這種方式,您不僅可以爲C#生成POCO,還可以爲VB.NET生成POCO及其全部可視化點擊,而不會與T4模板混淆。
項目/添加新項目... /數據/ ADO。NET實體數據模型/代碼首先來自數據庫
來自peta poco的t4模板無法做到這一點? – wiero 2012-04-13 09:58:42