1

直截了当地说:我想拥有独立的对象模型,我不会引用任何数据库引擎库,这样我就可以在多个对象或文档数据库(例如 RavenDB、db4o、eloquera 等)中使用该模型.)

另一方面,我将首先设计 db4o,所以让我们想象以下对象模型类:

public class User : IActivatable
{
    [Indexed]
    private string name;

    [Transient]
    private string securityinfo;

    ....
}

我已经拥有的一些解决方案(索引,级联):

  • [Indexed]我可以在 dbconfig 端配置的属性,例如:config.Common.ObjectClass(typeof(User)).ObjectField("name").Indexed(true);
  • 删除[Transient]属性 - ??
  • 删除IActivatable- ?? (我正在考虑使用 Postsharp 的仪器,它可以在编译后注入接口的实现,但它仍然需要引用 Db4objects.Db4o.dll。Db4oTool 仪器可以做到吗?)

所以问题:

如何从对象模型项目中删除对 Db4objects.Db4o.dll 的引用,并且仍然能够应用透明激活和瞬态(我已经介绍过的索引)等功能?

4

1 回答 1

0

关于IActivatable接口,db4o 确实需要可激活类型来实现该接口;如果您可以在模型程序集中使用 db4o 引用,那么 db4otool 可以为您添加此接口的实现(选项-ta 可能还有 -collections)(因此在源代码级别的模型类中没有对 db4o 的引用,也不需要做任何额外的工作)。

关于 TransientAttribute,您有一些选择:

  • 改用 NonSerialized 属性
  • 指定您自己的属性作为瞬态处理。

希望这可以帮助!

于 2013-04-07T15:40:33.217 回答