[seasar-dotnet:2362] DBFlute.NETに要望
竹内学
[E-MAIL ADDRESS DELETED]
2014年 8月 29日 (金) 10:26:06 JST
竹内です。お世話になります。
DBFlute.NET 0.8.9.58 + Firebird 2.5 (非公式ですが) で開発しておりました (ほぼ完了)。
DBFlute.NET いいですよー。バシバシ使い倒したいと思っております。
で、開発途中、ちょっと修正して貰えたらなぁと言うのがいくつかありましたので、
要望としてメールします。
1) 主キー以外を参照する additionalForeignKey で自動生成コードのデータ型
次の様なテーブルがあったとします。
create table DEPARTMENT (
ID bigint not null
, CODE varchar(20) not null
, NAME varchar(80) not null
, constraint DEPARTMENT_PK primary key (ID)
, constraint DEPARTMENT_UQ1 unique (CODE)
);
create table EMPLOYEE (
ID bigint not null
, CODE varchar(20) not null
, NAME varchar(20) not null
, BIRTH_DATE DATE
, DEPARTMENT_CODE varchar(20) not null -- DEPARTMENT.CODE を参照
, constraint EMPLOYEE_PK primary key (ID)
, constraint EMPLOYEE_UQ1 unique (CODE)
);
additionalForeignKeyMap.dfprop に次の様に宣言をしました。
map:{
; EMPLOYEE_FK1 = map:{
; localTableName = EMPLOYEE ; foreignTableName = DEPARTMENT
; localColumnName = DEPARTMENT_CODE ; foreignColumnName = CODE
}
}
この状態で generate.bat を実行しますと、BsDeparmentBhv.cs に
public virtual void LoadInventoryTempList(IList<Department> departmentList,
LoadReferrerOption<InventoryTempCB, InventoryTemp> loadReferrerOption) {
AssertObjectNotNull("departmentList", departmentList);
AssertObjectNotNull("loadReferrerOption", loadReferrerOption);
if (departmentList.Count == 0) { return; }
InventoryTempBhv referrerBhv = xgetBSFLR().Select<InventoryTempBhv>();
HelpLoadReferrerInternally<Department, long?, InventoryTempCB,
InventoryTemp>
(departmentList, loadReferrerOption, new
MyInternalLoadInventoryTempListCallback(referrerBhv));
}
protected class MyInternalLoadInventoryTempListCallback :
InternalLoadReferrerCallback<Department, String, InventoryTempCB,
InventoryTemp> {
... 略 ...
の様に出力されます (他にも似たコードが...)。
ここの問題は、MyInternalLoadInventoryTempListCallback で宣言されている型引数の第2パラメータは
String となっています。
しかし、LoadInventoryTempList の中では long? として宣言しています。
まぁ、手で直せるレベルだったので、手で直しましたが、
generate.bat を実行する度に修正をしなければならなかったので、出来れば自動生成の際にちゃんと出力して頂けたらなぁと。
2) 外だしSQLの引数にNullable型の使用
外だしSQLを次の様に宣言をしたとします。
/*
[df:title]
社員コードの検索
*/
-- #df:entity#
-- ##string CODE##
-- !df:pmb!
-- !!DateTime? birthDate!!
select CODE
from EMPLOYEE
/*BEGIN*/
where
/*IF pmb.BirthDate != null*/
BIRTH_DATE >= /*pmb.BirthDate*/'2001/01/01'
/*END*/
/*END*/
order by CODE asc
これで sql2entity.bat で生成された entity クラスのデータ型は DateTime? ではなくて DateTimeQ
となっています。
これも、手で直せるレベルだったので、手で直しましたが、
sql2entity.bat を実行する度に修正をしなければならなかったので、出来れば自動生成の際にちゃんとしたデータ型で出力して頂けたらなぁと。
あと、結果をスカラ型受けるのって対応していない? 色々チャレンジしてみましたが、途中で諦めました。
--- 以下は Firebird が非対応である事は承知の上で... ---
3) replace-schema.bat で既存のオブジェクトが削除されない
4) isIncrementSequenceToDataMax = true の対応
以上です。
ご検討頂けましたら、幸いに存じます。
よろしくお願いします。
--
竹内 学 <mailto:mtakeuchi @ ailesys.co.jp>
株式会社エールシステム
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
URL: <http://ml.seasar.org/archives/seasar-dotnet/attachments/20140829/c3afa934/attachment.html>
seasar-dotnet メーリングリストの案内