---------- 如何使用Sample代码 ----------
1. 数据库是SQL Server 2005, 在“sample/Database”里有已经生成的数据库,还有数据库脚本
2. 创建完数据库后需要创建数据库的ODBC, TdmSampleDBGW的AleasName必须是ODBC的名字, 参考TdmSampleDBGW.DataModuleCreate
//init m_db
m_db.AliasName := 'Sample_SQLServer';
3. 数据库的用户名和密码需要设置在
procedure TdmSampleDBGW.m_dbBeforeConnect(Sender: TObject);
begin
inherited;
if m_db.LoginPrompt = false then
begin
m_db.Params.Values['USER NAME'] := 'sa';
m_db.Params.Values['PASSWORD'] := '';
end;
end;
4. 每一个自定义的Entity类都必须要有一个对应的xml文件, xml文件必须放在“Sample/EntityMap/”路径下
5. 在Factory类里要创建每一个自定义的Entity类, 参考以下代码
//-----------------------------------------------------------------------------
// GetEntityName
//-----------------------------------------------------------------------------
function TFtySample.CreateEntity(strEntityName : String) : IEntity;
begin
strEntityName := LowerCase(strEntityName);
if (strEntityName = LowerCase(TEtyUser.Create.GetEntityName)) then
Result := TEtyUser.Create
else if (strEntityName = LowerCase(TEtySumAge.Create.GetEntityName)) then
Result := TEtySumAge.Create
else
Result := nil;
end;
---------- 如何写xml文件 ----------
<EntityMap>
<!--etyUser是TEtyUser.GetEntityName()的值-->
<EntityName>etyUser</EntityName>
<!--Table表示该etyUser对应的是数据库的表-->
<LoadType>Table</LoadType>
<!--tabUser 是对应的是数据库的表的名字-->
<TableName>tabUser</TableName>
<Fields>
<Field>
<!--UserName 是TEtyUser类的一个常量字符串, 是FD_USER_NAME = 'UserName'-->
<EntityFieldName>UserName</EntityFieldName>
<!--UserName是Entity的UserName对应在表tabUser里的字段名字-->
<TableFieldName>UserName</TableFieldName>
<!--string是字段的类型-->
<TableFieldType>string</TableFieldType>
<!--字段是否是表的主键(Primary Key)-->
<IsPK>true</IsPK>
</Field>
<Field>
<EntityFieldName>Address</EntityFieldName>
<TableFieldName>Address</TableFieldName>
<TableFieldType>string</TableFieldType>
<IsPK>false</IsPK>
</Field>
<Field>
<EntityFieldName>Age</EntityFieldName>
<TableFieldName>Age</TableFieldName>
<TableFieldType>int</TableFieldType>
<IsPK>false</IsPK>
</Field>
</Fields>
</EntityMap>
说明:
1. "EntityMap"文件夹的路径必须和EXE路径一样
2. <LoadType>目前可以是Table, StoredProc
3. <TableFieldType>目前可以是string, int等
---------- 注意事项 ----------
1. 数据库的字段类型必须是delphi能识别的, 参考 http://www.delphibbs.com/delphibbs/dispq.asp?lid=3693204
---------- 需要改进的地方 ----------
1. 目前只测试过SQL Server数据库, 没有测试过其他数据库
2. <TableFieldType>目前可以是string, int等, 但需要改进
3. <LoadType>目前可以是Table, StoredProc, 但需要改进
4. 不支持主从表直接操作
5. 需要改进FormatValueAppToDB
6. 需要改进FormatValueDBToApp
7. 需要改进ConnectionPool
8. 数据库暂时是用ODBC, 可以改成其他方式
---------- 已知bug ----------
1. TEtyList.Clear并没有真正释放内存
2. Entity = nil并没有真正释放内存, 参考 http://www.delphibbs.com/delphibbs/dispq.asp?lid=3674946