小编Ben*_*ich的帖子

我对对象持久性库的想法有用吗?

首先,如果这不是一个提出这个问题的合适场所,我很抱歉,但我不确定从哪里获得输入.

我已经创建了.NET对象持久性库的早期版本.它的特点是:

  • 一个非常简单的POCO持久性接口.
  • 主要的是:支持几乎所有可以想象的存储介质.这将是从本地文件系统上的纯文本文件到SQLite等嵌入式系统,任何标准SQL服务器(MySQL,postgres,Oracle,SQL Server等)到各种NoSQL数据库(Mongo,Couch,Redis等)的一切.驱动程序几乎可以编写任何东西,因此,例如,您可以非常轻松地编写驱动程序,其中实际的后备存储可以是Web服务.

当我第一次有这个想法时,我确信它非常棒.我很快创建了一个初始原型.现在,我正在讨论连接池,线程安全以及是否尝试支持LINQ等IQueryable等问题的"困难部分".我正在更加努力地看看是否值得开发这个库超出了我自己的要求.


这是一个基本的使用示例:

var to1 = new TestObject { id = "fignewton", number = 100, FruitType = FruitType.Apple };

ObjectStore db = new SQLiteObjectStore("d:/objstore.sqlite");
db.Write(to1);
var readback = db.Read<TestObject>("fignewton");

var readmultiple = db.ReadObjects<TestObject>(collectionOfKeys);
Run Code Online (Sandbox Code Playgroud)

现在可以使用的查询界面如下所示:

var appleQuery = new Query<TestObject>().Eq("FruitType", FruitType.Apple).Gt("number",50);
var results = db.Find<TestObject>(appleQuery); 
Run Code Online (Sandbox Code Playgroud)

我还在研究另一种查询接口,它允许您传递非常类似于SQL WHERE子句的内容.很明显,在.NET世界中支持IQueryable /表达式树会很棒.

由于该库支持许多具有不同功能的存储介质,因此它使用属性来帮助系统充分利用每个驱动程序.

[TableName("AttributeTest")]
[CompositeIndex("AutoProperty","CreatedOn")]
public class ComplexTypesObject
{
    [Id]
    public string id;

    [QueryableIndexed]
    public FruitType FruitType;

    public SimpleTypesObject EmbeddedObject;
    public string[] Array;
    public int AutoProperty { get; set; …
Run Code Online (Sandbox Code Playgroud)

c# object-persistence nosql

6
推荐指数
1
解决办法
347
查看次数

标签 统计

c# ×1

nosql ×1

object-persistence ×1