目前我爲DWScript + SQLite編寫了一個ORM映射。我已經成功實現了普通屬性(如字符串或整數)的映射,但現在我想添加外鍵和多對多的關係。爲此,我已計劃在類A中聲明外鍵屬性,然後在運行時向類B添加一個關係管理器來建模關係。我知道我可以將B中的關係管理器放在源代碼中,但想象一下,如果我的應用程序中有一些模型對框架中聲明的用戶模型有外鍵。修改每個新應用程序的框架是不現實的。DWScript,Monkey Patching:在運行時添加方法或屬性
我的問題:如何在腳本運行時將新屬性,字段或函數添加到對象/類?
這裏是一些代碼解釋:
type TClassB = class;
type TRelationManager = class end; // a class which controls the access to the relation, only a stub
type
[XORM_ForeignKey('LinkB')] //attribute to indicate property "LinkB" as Foreign Key
TClassA = class(TBaseModel)
private
FLinkB : TClassB;
published
property LinkB : TClassB; //Foreign Key to TClassB
end;
TClassB = class(TBaseModel)
private
published
// This field should be added at runtime and not directly in the source code, as shown here.
RelationManager : TRelationManager;
end;
..所以你的問題是什麼? Many2Many基數需要一個數據透視表,所以有些東西比外鍵多。爲什麼把這個屬性放在課堂上而不是財產上?什麼是「TRelationManager」? –
我調整了我的帖子並添加了一個明確的問題。我知道Many2Many的基數與外鍵不同。我的問題只針對方面,如何訪問其他類(在我的例子TClassB)的關係。在後臺發生了什麼,後臺發生了什麼,將被RelationManager隱藏起來。 我無法將屬性放在屬性級別,因爲DWScript只支持類屬性。如果DWScript將實現這個擴展,我也會改變它。 – DragonFlyOfGold