Plugin Developer DiscussionDiscussion for FogBugz Plugin developers |
||
It would be really nice to have an API for generic entities that behaved more like the other entity classes.
Suppose I implement IPluginDatabase, and as part of that I create a method called CreateEntityTable() that returns a CTable. If there were a CGenericEntityFactoryApi class that was exposed by the CPluginApi class I could do this: var entityapi = api.GenericEntityFactory(CreateEntityTable()); This would expose methods like CBugApi, CStatusApi, etc. So instead of datasets, I could work with entity objects. Instead of exposing dbfields as properties, they could be exposed in a dictionary.Instead of having to do work to determine either to insert or update, I could just Commit() it. Additionaly, items could be loaded with a Load method.
This does sound cool, but it's unlikely that we'll get to it before launch.
The FogCreek.Database project in PluginUtils has an ActiveRecord class that's built on top of the API. There's no simple example of it in use, but we use it in the CustomFields plugin (see CustomField.was). Basically you can do something like this: class Foo : ActiveRecord { [Field(PrimaryKey=True)] public int ixFoo; [Field(Length=255, NotNull=True, DefaultVal=""] public string sFoo public Foo(CPluginApi api) : base(api) { } } and then you have a functioning entity object. |
Powered by FogBugz