管理内存中数据库关系的模式
本文关键字:模式 关系 数据库 内存 管理 | 更新日期: 2023-09-27 18:28:30
不久前,我用C#编写了一个小框架来管理内存中的数据库关系(1到1,1到N)。从那个以后,我重构了一些设计,下面是一个如何使用当前代码的例子:
class A : FrameworkEntity
{
public static readonly Relationship1To1<A, B> relationship
= RelationshipManager.Instance.Relate1To1<A, B>();
public B B
{
get { return relationship.GetForward(this); }
set { relationship.SetForward(this, value); }
}
public C Parent
{
get { return C.relationship.GetReverse(this); }
}
}
class B : FrameworkEntity
{
public A A
{
get { return A.relationship.GetReverse(this); }
set { A.relationship.SetReverse(value, this); }
}
}
class C : FrameworkEntity
{
public static readonly Relationship1ToN<C, A> relationship
= RelationshipManager.Instance.Relate1ToN<C, A>();
// the implementation will call the RelationshipManager
// to update the relationship on add/update/delete
public ICollection<A> Children
{
get { return relationship.GetFoward(this); }
}
}
对我来说,这似乎是使用了具有依赖属性的中介设计模式。有一个中心的单例对象RelationshipManager
,用于管理对对象亲属的更改。每个实例通过实例属性访问该静态依赖关系。
有没有其他方法可以做到这一点,而不使用依赖属性?我没有为这个框架设计原始代码,我很好奇其他人怎么会这么做。
Sqlite显然有一个C#包装器,但它看起来确实需要维护。在内存中创建Sqlite数据库似乎是实现这一目标的理想选择(这取决于您试图进行"查询"、"连接"等工作的复杂性),而且它的占地面积很小。
(这可能超出了您想要做的,但实际获得真正的查询/联接支持等可能是值得的)