Updated Code To Get Class Definition From Table Structure
My previous post on Script to Create MetadataType classes was to work with LINQ-To-SQL and partial classes. EF 4.1 introduces Code First which uses POCOs and here is the code to create a class definition from a table’s structure.
Enjoy.
SET NOCOUNT ON declare @TableName varchar(256) = 'BusinessTypes' declare @EntityName varchar(256) = 'BusinessType' declare @TableSchema varchar(256) = 'dbo' declare @ColumnName varchar(256) , @DataType varchar(256) , @NewDataType varchar(256) , @MaxLength int , @Nullable varchar(5) declare @Lines table (Line varchar(1000)) insert into @Lines select 'public class ' + @EntityName insert into @Lines select '{' declare @DataTypes table (SqlDataType varchar(1000), DataType varchar(1000)) insert into @DataTypes (SqlDataType, DataType) values ('bit', 'bool') insert into @DataTypes (SqlDataType, DataType) values ('char', 'string') insert into @DataTypes (SqlDataType, DataType) values ('datetime', 'DateTime') insert into @DataTypes (SqlDataType, DataType) values ('decimal', 'decimal') insert into @DataTypes (SqlDataType, DataType) values ('int', 'int') insert into @DataTypes (SqlDataType, DataType) values ('money', 'decimal') insert into @DataTypes (SqlDataType, DataType) values ('ntext', 'string') insert into @DataTypes (SqlDataType, DataType) values ('nvarchar', 'string') insert into @DataTypes (SqlDataType, DataType) values ('smalldatetime', 'DateTime') insert into @DataTypes (SqlDataType, DataType) values ('timestamp', 'byte[]') insert into @DataTypes (SqlDataType, DataType) values ('uniqueidentifier', 'Guid') insert into @DataTypes (SqlDataType, DataType) values ('varchar', 'string') declare cols cursor for select COLUMN_NAME, Data_type, CHARACTER_MAXIMUM_LENGTH, IS_NULLABLE from INFORMATION_SCHEMA.COLUMNS where table_Name = @TableName and table_schema = @Tableschema order by ORDINAL_POSITION open cols fetch next from cols into @ColumnName, @DataType, @MaxLength, @Nullable while @@FETCH_STATUS = 0 begin select @NewDataType = DataType from @DataTypes where SqlDataType = @DataType if @DataType in ('varchar', 'char') and @Nullable = 'NO' insert into @Lines select char(9) + '[Required]' if @DataType in ('varchar', 'char') insert into @Lines select char(9) + '[StringLength(' + CAST(@MaxLength as varchar) + ')]' insert into @Lines select char(9) + 'public ' + @NewDataType + ' ' + @ColumnName + ' { get; set; }' insert into @Lines select char(9) + '' fetch next from cols into @ColumnName, @DataType, @MaxLength, @Nullable end close cols deallocate cols insert into @Lines select '}' select * FROM @Lines SET NOCOUNT OFF
Comments
Hello there I am so delighted I found your blog, I really found you by mistake, while I was searching on Askjeeve for something else, Anyways I am here now and would just like to say many thanks for a incredible post and a all round entertaining blog (I also love the theme/design), I don't have time to look over it all at the moment but I have book-marked it and also included your RSS feeds, so when I have time I will be back to read a lot more, Please do keep up the awesome work. gmail log in