- Хроники. - -

Генерация Entity классов с помощью MSSQL.

Posted By Ikutsin On 11 декабря 2008 @ 15:06 In .NET C#,MSSQL | Comments Disabled

Один мой добрый коллега прислал ссылку на отличный 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 [1].


Article printed from Хроники.:

URL to article: /731-generaciya-entity-klassov-s-pomoshhyu-mssql

URLs in this post:

[1] Business Entity Class Generator by Leon Tayson: http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=1039&lngWId=5

Copyright © 2008 Все, что меня окружает. All rights reserved.