USE [HrMarket2007]
GO
/****** Object: StoredProcedure [dbo].[CreateEntity] Script Date: 12/17/2014 10:06:26 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[CreateEntity]
(
@tablename nvarchar(100)
)
as
if not object_id('tempdb..#temp_table') is null drop table #temp_table
declare @cSharp varchar(max); --拼最后的C#语句
declare @fieldstotalcount int; --查看表中有多少个字段
declare @namespace varchar(20); --命名空间
declare @entityname varchar(100); --实体名称/也是表的简称
declare @primarykey varchar(20); --寻找主键
set @namespace='dbo';
if(charindex('.',@tablename))>0
begin
set @namespace=SUBSTRING(@tablename,1, len(@tablename)-charindex('.',reverse(@tablename)));
set @entityname=SUBSTRING(@tablename,len(@namespace)+2,len(@tablename));
end;
/*寻找主键*/
set @primarykey=(
select c.name as 字段名 from sysindexes i
inner join sysindexkeys k on i.id = k.id and i.indid = k.indid
inner join sysobjects o on i.id = o.id
inner join syscolumns c on i.id=c.id and k.colid = c.colid
where o.xtype = 'U' and o.name=@entityname
and exists(select 1 from sysobjects where xtype = 'PK' and name = i.name));
with A as(select name,usertype from syscolumns Where ID=OBJECT_ID(@tablename))
select ROW_NUMBER() over (order by (select 0)) as num,name,usertype into #temp_table from A;
set @fieldstotalcount=(select count(1) from #temp_table);
set @cSharp =
'select ''using System;''
union all select ''using System.Collections.Generic;''
union all select ''using System.Linq;''
union all select ''using System.Runtime.Serialization;''
union all select ''using System.Security.Permissions;''
union all select ''using System.Text;''
union all select ''using System.Threading.Tasks;''
union all select ''using Drision.Framework.DAL;''
union all select ''using Drision.Framework.Interfaces;''
union all select '' ''
union all select ''namespace HrMarket.Entity.'+@namespace+'''
union all select ''{''
union all select '' [DrxTable]''
union all select '' public class '+@entityname+' : BaseEntity''
union all select '' {''
union all select '' public '+@entityname+'() {}''
'
begin try
if(@fieldstotalcount=0) return;
set @cSharp = @cSharp + 'union all select '' ''
union all select '' #region DB字段''
union all select '' ''
'
declare @i int;
set @i=1;
while(@i<=@fieldstotalcount)
begin
declare @fieldName nvarchar(100);
declare @fieldType nvarchar(100);
set @fieldName=(select name from #temp_table where num=@i);
if(@fieldName=@primarykey)
begin
set @cSharp = @cSharp + 'union all select '' [DrxColumn(IsPrimaryKey = true)]''';
end
else
begin
set @cSharp = @cSharp + 'union all select '' [DrxColumn]''';
end
set @fieldType=(select case usertype
when 0 then 'string'
when 7 then 'int'
when 10 then 'long'
when 12 then 'DateTime?'
when 20 then 'byte[]'
else '这是新的字段类型,需补充' end from #temp_table where num=@i);
set @cSharp = @cSharp + 'union all select '' public '+@fieldType+' '+@fieldName+' { get; set; }''';
set @i=@i+1;
end
set @cSharp = @cSharp + 'union all select '' #endregion'''
set @cSharp = @cSharp + 'union all select '' }''
union all select ''}''
';
exec(@cSharp)
--select @primarykey
end try
begin catch
select error_number() AS ErrorNumber;
end catch;