Один мой добрый коллега прислал ссылку на отличный MSSQL скрипт, генерирующий класс на основе таблицы. Для меня, это внушительная экономия времени, так как даже с учетом всевозможных генераторов для LINQ и Hibernate. Предположим, что бизнес объект, после загрузки из базы, проходит через WCF, но для этого класс нужно снабдить дополнительными атрибутами DataMember. Процесс приписывания атрибута нужно будет делать каждый раз после генерации или постоянно создавать клон для WCF с общим интерфейсом. С использованием собственного механизма генерации, скрипт можно заставить это делать самому.
--**************************************
-- Name: Business Entity Class Generator
-- Description:This SP accepts a database object name (table, view) parameter and generates (C# code) custom entity class based on the object's fields. You can then copy and paste the generated code to your C# class.
-- By: Leon Tayson
--
--
-- Inputs:@ObjectName - name of your table, view
--
-- Returns:C# codes for your business entity object
--
--Assumes:None
--
--Side Effects:None
--This code is copyrighted and has limited warranties.
--Please see http://www.Planet-Source-Code.com/xq/ASP/txtCodeId.1039/lngWId.5/qx/vb/scripts/ShowCode.htm
--for details.
--**************************************
if exists (select * from dbo.sysobjects where id = object_id(N'procGenerateEntityClass') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure procGenerateEntityClass
GO
/*======================================================================
Business Entity Class Generator
This SP accepts a database object (table, view) name's parameter and
generates (C# code) custom entity class based on the object's fields
Sample Usage:
USE Northwind
EXEC procGenerateEntityClass 'Shippers'
Author:Leon C. Tayson
======================================================================*/
CREATE PROCEDURE procGenerateEntityClass
@ObjectName varchar(100)
AS
DECLARE @name varchar(20),
@type varchar(20)
DECLARE objCursor CURSOR
FOR
SELECT sc.name, st.name type FROM syscolumns sc
INNER JOIN systypes st
ON st.xusertype = sc.xusertype
WHERE Id=OBJECT_ID(@ObjectName)
DECLARE @declarationCodes varchar(8000),
@ctorCodes varchar(8000),
@propertyCodes varchar(8000)
SET @declarationCodes = ''
SET @ctorCodes = ''
SET @propertyCodes = ''
OPEN objCursor
FETCH NEXT FROM objCursor
INTO @name, @type
DECLARE @cType varchar(20)-- C# type
DECLARE @ctorParms varchar(4000)
SET @ctorParms = ''
IF @@FETCH_STATUS <> 0
BEGIN
CLOSE objCursor
DEALLOCATE objCursor
PRINT 'Error... Please check passed parameter'
RETURN
END
WHILE @@FETCH_STATUS = 0
BEGIN
SET @cType =
CASE
WHEN @type LIKE '%char%' OR @type LIKE '%text%'
THEN 'string'
WHEN @type IN ('decimal', 'numeric')
THEN 'double'
WHEN @type = 'real'
THEN 'float'
WHEN @type LIKE '%money%'
THEN 'decimal'
WHEN @type = 'bit'
THEN 'bool'
WHEN @type = 'bigint'
THEN 'long'
WHEN @type LIKE '%int%'
THEN 'int'
ELSE
@type
END
--PRINT CHAR(9) + 'private ' + @ctype + ' ' + 'm_' + @name + ';'
SET @declarationCodes = @declarationCodes + CHAR(9) + 'private ' + @ctype + ' ' + 'm_' + @name + ';' + CHAR(13)
SET @ctorCodes = @ctorCodes + CHAR(9) + CHAR(9) + 'm_' + @name + ' = ' + LOWER(LEFT(@name, 1)) + SUBSTRING(@name, 2, LEN(@name)) + ';' + CHAR(13)
SET @ctorParms = @ctorParms + @ctype + ' ' + LOWER(LEFT(@name, 1)) + SUBSTRING(@name, 2, LEN(@name)) + ', '
SET @propertyCodes = @propertyCodes + CHAR(9) + 'public ' + @ctype + ' ' + @name + CHAR(13) +
CHAR(9) + '{' + CHAR(13) +
CHAR(9) + CHAR(9) + 'get { return m_' + @name + '; }' + CHAR(13) +
CHAR(9) + CHAR(9) + 'set { m_' + @name + ' = value; }' + CHAR(13) +
CHAR(9) + '}' + CHAR(13)
FETCH NEXT FROM objCursor
INTO @name, @type
END
PRINT '[Serializable]'
PRINT 'public class ' + @ObjectName + 'Info'
PRINT '{'
PRINT @declarationCodes
PRINT ''
PRINT CHAR(9) + 'public ' + @ObjectName + 'Info(' + LEFT(@ctorParms, LEN(@ctorParms) - 1) + ')'
PRINT CHAR(9) + '{'
PRINT @ctorCodes
PRINT CHAR(9) + '}'
PRINT ''
PRINT @propertyCodes
PRINT '}'
CLOSE objCursor
DEALLOCATE objCursor
Источник: Business Entity Class Generator by Leon Tayson.
Метки:C#, разработка, база данных
Похожие статьи
- 4 февраля 2009 -- LINQ Insert or Update еще одно решение. (2)
- 1 июля 2008 -- Создание INSERT скрипта для данных таблицы MSSQL. (5)
- 30 июля 2010 -- DLR 1.0 на примере IronPython 2.6 (0)
- 31 августа 2009 -- CRUD на SQLite (5)
- 8 марта 2011 -- C#: Silverlight таймаут (Timeout) (2)
12 декабря, 2008 at 11:26
edinstvennqj nedostatok etogo scpripta to, 4to on generirujet resul`tat v output, a ne v peremennuju kotoruju mozno bqlo bq vernut` v prilozenije s posledujuwej generacijej *.cs faila. No eto porovimi 😉
4to kasajeca LINQ, to ego generator toze mozet bqt` raswiren. Sovetuju izu4it` sledujuwuju statju
http://www.codeproject.com/KB/.....toSQL.aspx
4 февраля, 2009 at 10:03
Насколько я понимаю, речь в этой статье идет об использовании утилиты reegenerator. Добрый коллега, ты же знаешь мое отношение к продуктам, за которые надо платить 😉
9 февраля, 2009 at 19:15
..and will be implemented based on a free Visual Studio tool named Reegenerator.