我聽說人們使用實體框架從數據庫生成模型相關的類。假設如果我不想使用實體框架作爲數據訪問層,而是想使用MS數據應用程序塊,那麼我怎麼能自動從數據庫生成mvc中的模型類,而不是手動編寫與模型相關的類。請以所有可能的方式指導我。謝謝從數據庫中自動生成mvc中的模型類
2
A
回答
2
好方法是使用ADO.NET實體數據模型: 在Visual Studio中右鍵單擊你的項目 - >「添加」 - >「新建項目」 - >「數據」 - >「ADO。 NET實體數據模型「 - >」從數據庫生成「 - >選擇或創建連接 - >選擇表 - >展開創建* .tt文件組 - >您得到它:-)
1
我知道這是一個老問題但是對於一個快速而輕鬆的課程,我在短信中使用它。它添加了我經常使用的'required'和'string-length'數據註釋。
DECLARE @TableName VARCHAR(MAX) = 'tablename' -- Replace 'tablename' with your table name
DECLARE @NameSpace VARCHAR(MAX) = 'namespace' -- Replace 'namespace' with your class namespace
DECLARE @TableSchema VARCHAR(MAX) = 'dbo' -- Replace 'dbo' with your schema name
DECLARE @result varchar(max) = ''
SET @result = @result + 'using System;' + CHAR(13)
SET @result = @result + 'using System.ComponentModel.DataAnnotations;' + CHAR(13) + CHAR(13)
IF (@TableSchema IS NOT NULL)
BEGIN
SET @result = @result + 'namespace ' + @NameSpace + CHAR(13) + '{' + CHAR(13)
END
SET @result = @result + 'public class ' + @TableName + CHAR(13) + '{' + CHAR(13)
SET @result = @result + '#region Instance Properties' + CHAR(13)
SELECT @result = @result + CHAR(13)
+ ' [Display(Name = "' + ColumnName + '")] ' + CHAR(13)
+ CASE bRequired WHEN 'NO'
THEN
CASE WHEN Len(MaxLen) > 0 THEN ' [Required, StringLength(' + MaxLen + ')]' + CHAR(13) ELSE ' [Required] ' + CHAR(13) END
ELSE
CASE WHEN Len(MaxLen) > 0 THEN ' [StringLength(' + MaxLen + ')]' + CHAR(13) ELSE '' END
END
+ ' public ' + ColumnType + ' ' + ColumnName + ' { get; set; } ' + CHAR(13)
FROM
(
SELECT c.COLUMN_NAME AS ColumnName
, CASE c.DATA_TYPE
WHEN 'bigint' THEN
CASE C.IS_NULLABLE
WHEN 'YES' THEN 'Int64?' ELSE 'Int64' END
WHEN 'binary' THEN 'Byte[]'
WHEN 'bit' THEN
CASE C.IS_NULLABLE
WHEN 'YES' THEN 'Boolean?' ELSE 'Boolean' END
WHEN 'char' THEN 'String'
WHEN 'date' THEN
CASE C.IS_NULLABLE
WHEN 'YES' THEN 'DateTime?' ELSE 'DateTime' END
WHEN 'datetime' THEN
CASE C.IS_NULLABLE
WHEN 'YES' THEN 'DateTime?' ELSE 'DateTime' END
WHEN 'datetime2' THEN
CASE C.IS_NULLABLE
WHEN 'YES' THEN 'DateTime?' ELSE 'DateTime' END
WHEN 'datetimeoffset' THEN
CASE C.IS_NULLABLE
WHEN 'YES' THEN 'DateTimeOffset?' ELSE 'DateTimeOffset' END
WHEN 'decimal' THEN
CASE C.IS_NULLABLE
WHEN 'YES' THEN 'Decimal?' ELSE 'Decimal' END
WHEN 'float' THEN
CASE C.IS_NULLABLE
WHEN 'YES' THEN 'Single?' ELSE 'Single' END
WHEN 'image' THEN 'Byte[]'
WHEN 'int' THEN
CASE C.IS_NULLABLE
WHEN 'YES' THEN 'Int32?' ELSE 'Int32' END
WHEN 'money' THEN
CASE C.IS_NULLABLE
WHEN 'YES' THEN 'Decimal?' ELSE 'Decimal' END
WHEN 'nchar' THEN 'String'
WHEN 'ntext' THEN 'String'
WHEN 'numeric' THEN
CASE C.IS_NULLABLE
WHEN 'YES' THEN 'Decimal?' ELSE 'Decimal' END
WHEN 'nvarchar' THEN 'String'
WHEN 'real' THEN
CASE C.IS_NULLABLE
WHEN 'YES' THEN 'Double?' ELSE 'Double' END
WHEN 'smalldatetime' THEN
CASE C.IS_NULLABLE
WHEN 'YES' THEN 'DateTime?' ELSE 'DateTime' END
WHEN 'smallint' THEN
CASE C.IS_NULLABLE
WHEN 'YES' THEN 'Int16?' ELSE 'Int16'END
WHEN 'smallmoney' THEN
CASE C.IS_NULLABLE
WHEN 'YES' THEN 'Decimal?' ELSE 'Decimal' END
WHEN 'text' THEN 'String'
WHEN 'time' THEN
CASE C.IS_NULLABLE
WHEN 'YES' THEN 'TimeSpan?' ELSE 'TimeSpan' END
WHEN 'timestamp' THEN
CASE C.IS_NULLABLE
WHEN 'YES' THEN 'DateTime?' ELSE 'DateTime' END
WHEN 'tinyint' THEN
CASE C.IS_NULLABLE
WHEN 'YES' THEN 'Byte?' ELSE 'Byte' END
WHEN 'uniqueidentifier' THEN 'Guid'
WHEN 'varbinary' THEN 'Byte[]'
WHEN 'varchar' THEN 'String'
ELSE 'Object'
END AS ColumnType,
c.IS_NULLABLE AS bRequired,
CASE c.DATA_TYPE
WHEN 'char' THEN CONVERT(varchar(10),c.CHARACTER_MAXIMUM_LENGTH)
WHEN 'nchar' THEN CONVERT(varchar(10),c.CHARACTER_MAXIMUM_LENGTH)
WHEN 'nvarchar' THEN CONVERT(varchar(10),c.CHARACTER_MAXIMUM_LENGTH)
WHEN 'varchar' THEN CONVERT(varchar(10),c.CHARACTER_MAXIMUM_LENGTH)
ELSE ''
END AS MaxLen,
c.ORDINAL_POSITION
FROM INFORMATION_SCHEMA.COLUMNS c
WHERE c.TABLE_NAME = @TableName and ISNULL(@TableSchema, c.TABLE_SCHEMA) = c.TABLE_SCHEMA
) t
ORDER BY t.ORDINAL_POSITION
SET @result = @result + CHAR(13) + '#endregion Instance Properties' + CHAR(13)
SET @result = @result + '}' + CHAR(13)
IF (@TableSchema IS NOT NULL)
BEGIN
SET @result = @result + CHAR(13) + '}'
END
PRINT @result
相關問題
- 1. 首先在mvc 4數據庫中自動生成模型?
- 2. 從模型類生成數據庫
- 3. Django:從模型中生成數據庫vs數據庫中的模型
- 4. 生成HTML的MVC 3自動屬性根據數據類型
- 5. 類似於sqlautocode for rails(從現有數據庫模式自動生成模型)?
- 6. 從C#類生成數據庫/實體數據模型
- 7. DOCTRINE:從Mysql數據庫生成模型
- 8. Symfony從模型生成數據庫
- 9. Django從數據庫生成模型
- 10. ASP.NET MVC 2動態生成模型中的數據註釋
- 11. 在ASP.NET MVC中動態生成來自數據庫的URL?
- 12. 從c#生成數據庫模式類
- 13. 從數據庫模式中生成類的類
- 14. 根據ROR中現有的數據庫自動生成類
- 15. 從MySQL數據庫中爲Doctrine生成YAML模式或模型
- 16. .NET MVC 3,自動生成/映射模型模式到Mysql中?
- 17. 重新生成數據庫與從模型生成的表
- 18. 從無類型mvc 2模型或字典中生成表格
- 19. 從c#中的數據庫自動生成數字
- 20. 凌主編的Django模型自動完成數據庫模型字段類型
- 21. 如何從Oracle數據庫中的對象類型生成XML
- 22. 使用MySQL作爲數據庫從模型生成數據庫
- 23. 如何從ASP.NET MVC3中的數據庫中自動生成DataValidation「Buddy」類?
- 24. 從Linq數據庫生成模型類到SQL
- 25. EF從數據庫更改中重新生成代碼模型
- 26. 從nodeJS中現有數據庫生成遷移和模型
- 27. Rails的 - 從數據庫中自動生成遷移改變
- 28. 從sqlite數據庫中返回自動生成的列值
- 29. MVC模型中的數據庫查詢
- 30. 從MongoEngine模型自動生成WTForms數據
你應該看看了LINQ to SQL和如何使用拖放UI與它去。這裏有一個教程:http://www.codeproject.com/Articles/22000/LINQ-to-SQL – mattytommo
如果你可以從你的數據庫生成xsd文件,那麼你可以使用xsd.exe從xsd文件生成類。 –
我認爲你正在尋找這個工具https://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d – tsohtan