反射真是很好用的東東。因為公司要用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...