In the previous post I showed how to generate C# classes from Oracle table definitions using a PL/SQL stored procedure. This post deals with the ClassMap generation.![]()
I reuse the original two cursors for tables and columns, and replace the field/getter/setting declaration by Fluent NHibernate calls to Id(), Map(), and Reference():
begin
dbms_output.enable(1000000);
for obj in cObjects loop
csclass := replace(initcap(obj.object_name), '_', '');
dbms_output.put_line('public partial class ' || csclass
|| 'Map : ClassMap<' || csclass || '>');
dbms_output.put_line('{');
dbms_output.put_line(' public ' || csclass || 'Map()');
dbms_output.put_line(' {');
dbms_output.put_line(' Table("' || obj.object_name || '");');
for col in cColumns(obj.object_name) loop
csname := replace(initcap(col.column_name), '_', '');
case col.data_type
when 'CHAR' then
dbms_output.put_line(' Map(x => x.' || csname || ', "'
|| col.column_name || '");');
when 'NUMBER' then
if col.column_name = 'OID' then
dbms_output.put_line(' Id(x => x.' || csname || ', "'
|| col.column_name
|| '").GeneratedBy.Custom("trigger-identity");');
elsif col.column_name like '%\_OID' escape '\'
and col.table_name is not null then
dbms_output.put_line(' References(x => x.'
|| replace(initcap(replace(col.column_name, '_OID', '')), '_', '')
|| ', "' || col.column_name || '");');
else
dbms_output.put_line(' Map(x => x.' || csname || ', "'
|| col.column_name || '");');
end if;
else
dbms_output.put_line(' Map(x => x.' || csname || ', "'
|| col.column_name || '");');
end case;
end loop;
dbms_output.put_line(' }');
dbms_output.put_line('}');
end loop;
end;

thanks for sharing