ScalarDB Cluster .NET Client SDK での LINQ をはじめよう
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
ScalarDB Cluster .NET Client SDK は、LINQ と Entity Framework のような機能を使用してクラスターをクエリすることをサポートしています。
この SDK は Entity Framework をサポートしていません。代わりに、この SDK は Entity Framework に似た機能を実装します。
LINQ を使用するには、クラスターで SQL サポートを有効にする必要があります。
SDK をインストールする
ScalarDB Cluster と同じメジャーバージョンとマイナーバージョンの SDK を .NET プロジェクトにインストールします。組み込みの NuGet パッケージマネージャーを使用してこれを行うことができます。<MAJOR>.<MINOR>
を、使用しているバージョンに置き換えます。
dotnet add package ScalarDB.Client --version '<MAJOR>.<MINOR>.*'
クライアント設定の追加
ASP.NET Core アプリの appsettings.json
ファイルに ScalarDbOptions
セクションを追加し、<HOSTNAME_OR_IP_ADDRESS>
を FQDN または IP アドレスに、<PORT>
をクラスターのポート番号 (デフォルトでは 60053
) に置き換えます。
{
"ScalarDbOptions": {
"Address": "http://<HOSTNAME_OR_IP_ADDRESS>:<PORT>",
"HopLimit": 10
}
}
設定ファイルやクライアントを設定するその他の方法の詳細については、クライアント設定を参照してください。
クラスを設定する
SQL サポートが有効になっていることを確認したら、使用する ScalarDB テーブルごとに C# クラスを作成します。例:
using System.ComponentModel.DataAnnotations.Schema;
using ScalarDB.Client.DataAnnotations;
// ...
[Table("ns.statements")]
public class Statement
{
[PartitionKey]
[Column("statement_id", Order = 0)]
public int Id { get; set; }
[SecondaryIndex]
[Column("order_id", Order = 1)]
public string OrderId { get; set; } = String.Empty;
[SecondaryIndex]
[Column("item_id", Order = 2)]
public int ItemId { get; set; }
[Column("count", Order = 3)]
public int Count { get; set; }
}
[Table("order_service.items")]
public class Item
{
[PartitionKey]
[Column("item_id", Order = 0)]
public int Id { get; set; }
[Column("name", Order = 1)]
public string Name { get; set; } = String.Empty;
[Column("price", Order = 2)]
public int Price { get; set; }
}
パーティションキー、クラスタリングキー、またはセ カンダリインデックスが複数の列で設定されている場合、ColumnAttribute
の Order
プロパティによってキーまたはインデックス内の順序が決まります。
プロパティに使用する型の詳細については、ScalarDB 列型と .NET 型間の変換方法 を参照してください。
使用するすべてのテーブルのプロパティを持つコンテキストクラスを作成します。例:
public class MyDbContext: ScalarDbContext
{
public ScalarDbSet<Statement> Statements { get; set; }
public ScalarDbSet<Item> Items { get; set; }
}
すべてのクラスが作成されたら、作成されたコンテキストを依存性注入に追加する必要があります。例:
using ScalarDB.Client.Extensions;
//...
var builder = WebApplication.CreateBuilder(args);
//...
builder.Services.AddScalarDbContext<MyDbContext>();
コンテキストは、次のようにコントローラーのコンストラクターに挿入できます。
[ApiController]
public class OrderController: ControllerBase
{
private readonly MyDbContext _myDbContext;
public OrderController(MyDbContext myDbContext)
{
_myDbContext = myDbContext;
}
}
LINQ を使用してプロパティをクエリする
コントローラーで MyDbContext
を受け取ったら、LINQ を使用してそのプロパティをクエリできます。例:
クエリ構文を使用する
from stat in _myDbContext.Statements
join item in _myDbContext.Items on stat.ItemId equals item.Id
where stat.Count > 2 && item.Name.Contains("apple")
orderby stat.Count descending, stat.ItemId
select new { item.Name, stat.Count };
メソッド構文を使用する
_myDbContext.Statements
.Where(stat => stat.OrderId == "1")
.Skip(1)
.Take(2);
First
メソッドを使用して、パーティションキーで 1 つの Statement
を取得します。
_myDbContext.Statements.First(stat => stat.OrderId == "1");