反射實體模型生成Oracle SQL指令碼

2022-01-29 11:07:45 字數 3762 閱讀 2949

反射真是很好用的東東。因為公司要用oracle資料庫,而實體模型是現有的。於是就想著用反射來找到實體中的實體類和屬性,然後來生成sql指令碼。

貼一下**:

///

///生成sql的方法

/// static

void

generateoraclesql()

if (p.name.tolower().endswith("id"

))

else

}");

");"-- creating primary key on \"id\" in table '

" + type.name + "'"

);"alter table \"

" + schemal + "

\".\"

" + type.name + "\""

);"add constraint \"pk_

" + type.name + "\""

);"primary key (\"id\" )");

"enable");

"validate;");

using (streamwriter sw = new streamwriter("

ahmt.sql

", true

)) }}

}//////

根據.net型別,返回資料庫的型別。因為只作測試,不一定準確

/// ///

///static

string getsqltype(string

typename)

return

type;

}

二次修改,增加表名的分詞

///

///生成sql的方法

/// static

void

generateoraclesql()

if ((tp.name.startswith("

i")&&tp.basetype==null) || tp.name == "

entity")

continue

;

"-- creating table '

" + tp.name.splitword() + "'"

);"create table \"

" + schemal + "

\".\"

" +tp.name.splitword().toupper() + "

\" (");

propertyinfo propertyinfos =tp.getproperties();

foreach (var p in

propertyinfos)

"--create foreign key on table

" +tp.name.splitword());

"alter table \"

" + schemal + "

\".\"

" + tp.name.splitword().toupper() + "\""

);

//因為oracle名字不能超過30個字元,所以如果大於30則截斷

string constraintname= tp.name.toupper() +"

_"+p.propertytype.name.toupper();

if (constraintname.length > 24

)

"add constraint fk_

" +constraintname);

"foreign key (\"

" + p.propertytype.name.splitword().toupper() + "

id\") ");

"references \"

"+schemal+"

\".\"

" + p.propertytype.name.splitword().toupper()+"\""

);"(\"id\")");

"enable");

"validate;");

"-- creating index for foreign key ");

"create index \"ix_fk_

" + constraintname + "\""

);"on \"

" + schemal + "

\".\"

" + tp.name.splitword().toupper() + "\""

);

//("actypeid");

(\""+p.propertytype.name.splitword().toupper()+"

id\");");

continue

; }

if (p.name.tolower().endswith("id"

))

else

}else

else}}

tablebuilder=tablebuilder.remove(tablebuilder.length -3, 1);"

);");

//建立主鍵

-- creating primary key on \"id\"in table '

" + tp.name + "'"

);"alter table \"

" + schemal + "

\".\"

" + tp.name.splitword().toupper() + "\""

);"add constraint \"pk_

" + tp.name.toupper() + "\""

);"primary key (\"id\" )");

"enable");

"validate;");}}

using (streamwriter sw = new streamwriter("

ahmt.sql

", true

))

}//////

返回.net型別對應的oralce型別

/// ///

///static

string getsqltype(string

typename)

return

tp; }

//////

分割復合型別的英文名,如orderdetail

///分割成order_detail

/// ///

///static

string splitword(this

string

word)}}

int start = 0

;

for (int i = 0; i < indexs.count; i++)

fw += word.substring(start, word.length -start);

return

fw; }

實體 聯絡模型

一 實體 聯絡 e r 資料模型概述 該資料模型基於對現實世界的這樣一種認識 世界由一組稱為實體的基本物件及這些物件間的聯絡組成,該模型是一種語義模型,模型的語義方面主要體現在模型力圖去表達資料的意義。1.1 實體集 實體是現實世界中可區別於其他物件的 事件 或 物體 每個實體有一組性質,其中一部分...

C 反射實體類

using system using system.collections.generic using system.text using system.reflection namespace easysrcoreclass.component.utilcomponent 設定屬性值 public...

利用反射例項化實體

根據swagger apimodelproperty 註解類的 example 例項化 實體 param clazz 實體類 param 返回例項化的資料 return 返回例項化的資料 public static t mockexamplemodel classclazz return map2b...