QxOrm 的 example中
#ifndef _QX_BLOG_AUTHOR_H_ #define _QX_BLOG_AUTHOR_H_ class blog; class QX_BLOG_DLL_EXPORT author { public: // -- typedef typedef boost::shared_ptr<blog> blog_ptr; typedef std::vector<blog_ptr> list_blog; // -- enum enum enum_sex { male, female, unknown }; // -- properties QString m_id; QString m_name; QDate m_birthdate; enum_sex m_sex; list_blog m_blogX; // -- contructor, virtual destructor author() : m_id(0), m_sex(unknown) { ; } virtual ~author() { ; } // -- methods int age() const; }; QX_REGISTER_PRIMARY_KEY(author, QString) QX_REGISTER_HPP_QX_BLOG(author, qx::trait::no_base_class_defined, 0) typedef boost::shared_ptr<author> author_ptr; typedef qx::QxCollection<QString, author_ptr> list_author; #endif // _QX_BLOG_AUTHOR_H_ |
他的主键的类型默认是 long ,可以用QX_REGISTER_PRIMARY_KEY(author, QString) 来改变默认的主键类型,但是 这里的QString会被注册成
SQL 中的TEXT类型 这在 MSSQL 中是不能用的,所以找寻源代码 QxClassX.cpp中发现
void QxClassX::initSqlTypeByClassName()
{
m_lstSqlTypeByClassName.clear();
m_lstSqlTypeByClassName.insert("bool", "SMALLINT");
m_lstSqlTypeByClassName.insert("qx_bool", "SMALLINT");
m_lstSqlTypeByClassName.insert("short", "SMALLINT");
m_lstSqlTypeByClassName.insert("int", "INTEGER");
m_lstSqlTypeByClassName.insert("long", "INTEGER");
m_lstSqlTypeByClassName.insert("long long", "INTEGER");
m_lstSqlTypeByClassName.insert("float", "FLOAT");
m_lstSqlTypeByClassName.insert("double", "FLOAT");
m_lstSqlTypeByClassName.insert("long double", "FLOAT");
m_lstSqlTypeByClassName.insert("unsigned short", "SMALLINT");
m_lstSqlTypeByClassName.insert("unsigned int", "INTEGER");
m_lstSqlTypeByClassName.insert("unsigned long", "INTEGER");
m_lstSqlTypeByClassName.insert("unsigned long long", "INTEGER");
m_lstSqlTypeByClassName.insert("std::string", "TEXT");
m_lstSqlTypeByClassName.insert("std::wstring", "TEXT");
m_lstSqlTypeByClassName.insert("QString", "varchar(10)");
m_lstSqlTypeByClassName.insert("QVariant", "TEXT");
m_lstSqlTypeByClassName.insert("QUuid", "TEXT");
m_lstSqlTypeByClassName.insert("QDate", "DATE");
m_lstSqlTypeByClassName.insert("QTime", "TIME");
m_lstSqlTypeByClassName.insert("QDateTime", "TIMESTAMP");
m_lstSqlTypeByClassName.insert("QByteArray", "BLOB");
m_lstSqlTypeByClassName.insert("qx::QxDateNeutral", "TEXT");
m_lstSqlTypeByClassName.insert("qx::QxTimeNeutral", "TEXT");
m_lstSqlTypeByClassName.insert("qx::QxDateTimeNeutral", "TEXT");
}
这里修改了m_lstSqlTypeByClassName.insert("QString", "varchar(10)");
使得 QString 被注册成 varchar(10)类型。