当前位置: 首页 > 工具软件 > RavenDB > 使用案例 >

RavenDB起步--客户端API(一)

明越
2023-12-01

上一小节我们演示了一个简单的实例,从本篇文章开始我将通过两篇文章带领大家学习一下 RavenDB 常用客户端 API。

Document Store

Document Store 是客户端 API 的主要入口点,它包括了包含所有客户端配置,包括序列化配置、故障转移行为、缓存选项等内容。一般来说每个单例应用程序都会拥有一个Document Store实例,因此 Document Store 是线程安全的,它初始化代码类似于下面这样:

public class DocumentStoreHolder
{
    private readonly static Lazy<IDocumentStore> _store = 
    	new Lazy<IDocumentStore>(CreateDocumentStore);

    private static IDocumentStore CreateDocumentStore()
    {
        var documentStore = new DocumentStore
        {
            Urls = // urls of the nodes in the RavenDB Cluster
            {
                "https://ravendb-01:8080",
                "https://ravendb-02:8080",
                "https://ravendb-03:8080",
            },
            Certificate = 
                new X509Certificate2("tasks.pfx"),
                    Database = "Tasks",
        };

        documentStore.Initialize();
        return documentStore;
    }

    public static IDocumentStore Store
    {
        get { return _store.Value; }
    }
}

上面的代码中使用 Lazy 是为了保证 Document Store 只能被创建一次,因此在这里不需要担心线程安全和双重锁定问题。

约定

RavenDB 默认已经做了一些列的约定,这些约定既包含怎么保存内容,也包含如何序列化实体成文文档。在小型项目中使用这些默认的约定基本上已经满足了,但是对于中型项目甚至大型项目来说默认约定就显得有些鸡肋,因此在需要自定约定的情况下,我们可以调用 DocumentStore.Conventions 方法来设置符合项目情况的约定。比如说 RavenDB 默认使用 Id 作为文档内容的 ID ,但是我们并不希望这么做,我们希望使用实体名称加Id的形式来产生ID,那么我们可以这样定义:

documentStore.Conventions.FindIdentityProperty = 
    prop => prop.Name == prop.DeclaringType.Name + "Id";

这个例子只是展现 RavenDB 可以实现自定义约定,更多的属性我将会在后续课程中讲解。

身份验证

身份验证是我们在开发项目时必须要考虑到的问题,RavenDB 完全支持身份认证这个概念。一般来说我们的开发环境是如果用在线上的话是不安全,我们需要以安全的模式在线上环境中运行 RavenDB ,这时我们可以使用 RavenDB 支持的 x509 客户端证书来进行身份验证。这种认证方式表示出于特定原因授予数据库的特定访问权限。X509 是一种自然的验证方式,并且一般来说 X509 客户端证书是基于每个应用程序/角色授予的。具体的身份认证我将会在后面的专题中进行详细讲解。

Tip:默认情况下,RavenDB 会拒绝 localhost 在不安全模式下访问任何内容。这样做是出于安全原因,防止管理员在未经网络身份验证的情况下暴露 RavenDB。如果在禁用身份验证的情况下配置非本地 URL,那么 RavenDB 会显示错误页面,解释情况并提供有关如何解决问题的说明。

 类似资料: