﻿<!DOCTYPE html>
<!--[if IE]><![endif]-->
<html>
  
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title>Namespace Apache.Ignite.Core.Cache.Store
   | Apache Ignite.NET </title>
    <meta name="viewport" content="width=device-width">
    <meta name="title" content="Namespace Apache.Ignite.Core.Cache.Store
   | Apache Ignite.NET ">
    <meta name="generator" content="docfx 2.58.4.0">
    
    <link rel="shortcut icon" href="../images/favicon.ico">
    <link rel="stylesheet" href="../styles/docfx.vendor.css">
    <link rel="stylesheet" href="../styles/docfx.css">
    <link rel="stylesheet" href="../styles/main.css">
    <meta property="docfx:navrel" content="../toc.html">
    <meta property="docfx:tocrel" content="toc.html">
    
    <meta property="docfx:rel" content="../">
    
  </head>
  <body data-spy="scroll" data-target="#affix" data-offset="120">
    <div id="wrapper">
      <header>
        
        <nav id="autocollapse" class="navbar navbar-inverse ng-scope" role="navigation">
          <div class="container">
            <div class="navbar-header">
              <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
              </button>
              
              <a class="navbar-brand" href="../index.html">
                <img id="logo" class="svg" src="../images/logo_ignite_32_32.png" alt="">
              </a>
            </div>
            <div class="collapse navbar-collapse" id="navbar">
              <form class="navbar-form navbar-right" role="search" id="search">
                <div class="form-group">
                  <input type="text" class="form-control" id="search-query" placeholder="Search" autocomplete="off">
                </div>
              </form>
            </div>
          </div>
        </nav>
        
        <div class="subnav navbar navbar-default">
          <div class="container hide-when-search" id="breadcrumb">
            <ul class="breadcrumb">
              <li></li>
            </ul>
          </div>
        </div>
      </header>
      <div class="container body-content">
        
        <div id="search-results">
          <div class="search-list">Search Results for <span></span></div>
          <div class="sr-items">
            <p><i class="glyphicon glyphicon-refresh index-loading"></i></p>
          </div>
          <ul id="pagination" data-first="First" data-prev="Previous" data-next="Next" data-last="Last"></ul>
        </div>
      </div>
      <div role="main" class="container body-content hide-when-search">
        
        <div class="sidenav hide-when-search">
          <a class="btn toc-toggle collapse" data-toggle="collapse" href="#sidetoggle" aria-expanded="false" aria-controls="sidetoggle">Show / Hide Table of Contents</a>
          <div class="sidetoggle collapse" id="sidetoggle">
            <div id="sidetoc"></div>
          </div>
        </div>
        <div class="article row grid-right">
          <div class="col-md-10">
            <article class="content wrap" id="_content" data-uid="Apache.Ignite.Core.Cache.Store">
  
  <h1 id="Apache_Ignite_Core_Cache_Store" data-uid="Apache.Ignite.Core.Cache.Store" class="text-break">Namespace Apache.Ignite.Core.Cache.Store
  </h1>
  <div class="markdown level0 summary"></div>
  <div class="markdown level0 conceptual"></div>
  <div class="markdown level0 remarks"></div>
    <h3 id="classes">Classes
  </h3>
      <h4><a class="xref" href="Apache.Ignite.Core.Cache.Store.CacheParallelLoadStoreAdapter-3.html">CacheParallelLoadStoreAdapter&lt;TK, TV, TData&gt;</a></h4>
      <section><p>Cache storage adapter with parallel loading in LoadAll method. </p>
</section>
      <h4><a class="xref" href="Apache.Ignite.Core.Cache.Store.CacheStoreAdapter-2.html">CacheStoreAdapter&lt;TK, TV&gt;</a></h4>
      <section><p>Cache storage convenience adapter. It provides default implementation for 
bulk operations, such as <code>LoadAll</code>, <code>PutAll</code> and
<code>RemoveAll</code> by sequentially calling corresponding <code>Load</code>,
<code>Put</code> and <code>Remove</code> operations. Use this adapter whenever 
such behaviour is acceptable. However in many cases it maybe more preferable 
to take advantage of database batch update functionality, and therefore default 
adapter implementation may not be the best option.
<p>
Note that <code>LoadCache</code> method has empty implementation because it is 
essentially up to the user to invoke it with specific arguments.</p>
</section>
      <h4><a class="xref" href="Apache.Ignite.Core.Cache.Store.CacheStoreException.html">CacheStoreException</a></h4>
      <section><p>Indicates an error during CacheStore operation.</p>
</section>
    <h3 id="interfaces">Interfaces
  </h3>
      <h4><a class="xref" href="Apache.Ignite.Core.Cache.Store.ICacheStore.html">ICacheStore</a></h4>
      <section><p>Non-generic base type for <a class="xref" href="Apache.Ignite.Core.Cache.Store.ICacheStore-2.html">ICacheStore&lt;TK, TV&gt;</a>, used only for configuration property.
Users should implement generic <a class="xref" href="Apache.Ignite.Core.Cache.Store.ICacheStore-2.html">ICacheStore&lt;TK, TV&gt;</a>.</p>
</section>
      <h4><a class="xref" href="Apache.Ignite.Core.Cache.Store.ICacheStore-2.html">ICacheStore&lt;TK, TV&gt;</a></h4>
      <section><p>API for cache persistent storage for read-through and write-through behavior.
<p>
Generic argument types depend on <a class="xref" href="Apache.Ignite.Core.Cache.Configuration.CacheConfiguration.html#Apache_Ignite_Core_Cache_Configuration_CacheConfiguration_KeepBinaryInStore">KeepBinaryInStore</a> property.
When <code>true</code> (default), cache store operates on <a class="xref" href="Apache.Ignite.Core.Binary.IBinaryObject.html">IBinaryObject</a> instances.
Otherwise, generic arguments should be the same as in corresponding <a class="xref" href="Apache.Ignite.Core.Cache.ICache-2.html">ICache&lt;TK, TV&gt;</a>.
<p>
Persistent store is configured in Ignite&apos;s Spring XML configuration file via
<code>CacheConfiguration.setStore()</code> property. If you have an implementation
of cache store in .NET, you should use special Java wrapper which accepts assembly name and
class name of .NET store implementation (both properties are mandatory).</p>
<p>Optionally, you may specify &quot;properies&quot; property to set any property values on an instance of your store.
<example>
Here is an example:<p>
<pre><code>&lt;bean class=&quot;org.apache.ignite.configuration.CacheConfiguration&quot;>
    ...
    &lt;property name=&quot;cacheStoreFactory&quot;>
        &lt;bean class=&quot;org.apache.ignite.platform.dotnet.PlatformDotNetCacheStoreFactory&quot;>
            &lt;property name=&quot;assemblyName&quot; value=&quot;MyAssembly&quot;/>
            &lt;property name=&quot;className&quot; value=&quot;MyApp.MyCacheStore&quot;/>
            &lt;property name=&quot;properties&quot;>
                &lt;map>
                    &lt;entry key=&quot;IntProperty&quot;>
                        &lt;value type=&quot;java.lang.Integer&quot;>42&lt;/value>
                    &lt;/entry>
                    &lt;entry key=&quot;StringProperty&quot; value=&quot;String value&quot;/>
                &lt;/map>
            &lt;/property>
        &lt;/bean>
    &lt;/property>
    ...
&lt;/bean></code></pre>
<p></example>
Assemply name and class name are passed to <a target="_blank" href="http://msdn.microsoft.com/en-us/library/d133hta4.aspx"><strong>System.Activator.CreateInstance(String, String)</strong></a>
method during node startup to create an instance of cache store. Refer to its documentation for details.
<p>
All transactional operations of this API are provided with ongoing <a class="xref" href="Apache.Ignite.Core.Transactions.ITransaction.html">ITransaction</a>,
if any. You can attach any metadata to transaction, e.g. to recognize if several operations 
belong to the same transaction or not.
<example>
Here is an example of how attach a ODBC connection as transaction metadata:<p>
<pre><code>OdbcConnection conn = tx.Meta(&quot;some.name&quot;);

if (conn == null)
{
    conn = ...; // Create or get connection.

    // Store connection in transaction metadata, so it can be accessed
    // for other operations on the same transaction.
    tx.AddMeta(&quot;some.name&quot;, conn);
}</code></pre>
<p></example></p>
</section>
      <h4><a class="xref" href="Apache.Ignite.Core.Cache.Store.ICacheStoreSession.html">ICacheStoreSession</a></h4>
      <section><p>Session for the cache store operations. The main purpose of cache store session
is to hold context between multiple store invocations whenever in transaction. For example,
you can save current database connection in the session <a class="xref" href="Apache.Ignite.Core.Cache.Store.ICacheStoreSession.html#Apache_Ignite_Core_Cache_Store_ICacheStoreSession_Properties">Properties</a> map. You can then
commit this connection in the <a class="xref" href="Apache.Ignite.Core.Cache.Store.ICacheStore-2.html#Apache_Ignite_Core_Cache_Store_ICacheStore_2_SessionEnd_System_Boolean_">SessionEnd(Boolean)</a> method.</p>
</section>
</article>
          </div>
          
          <div class="hidden-sm col-md-2" role="complementary">
            <div class="sideaffix">
              <nav class="bs-docs-sidebar hidden-print hidden-xs hidden-sm affix" id="affix">
                <h5>In This Article</h5>
                <div></div>
              </nav>
            </div>
          </div>
        </div>
      </div>
      
      <footer>
        <div class="grad-bottom"></div>
        <div class="footer">
          <div class="container">
            <span class="pull-right">
              <a href="#top">Back to top</a>
            </span>
            © 2015 - 2019 The Apache Software Foundation
            
          </div>
        </div>
      </footer>
    </div>
    
    <script type="text/javascript" src="../styles/docfx.vendor.js"></script>
    <script type="text/javascript" src="../styles/docfx.js"></script>
    <script type="text/javascript" src="../styles/main.js"></script>
  </body>
</html>
