使用c# linq對Cassandra進(jìn)行增刪改查

Cassandra是一個Wide-column store,類似于HBase,nosql的一種,它有一個“靜態(tài)列(static column)”阱表,可以只更新一列中的一個colum,特別酷炫。
其他的功能我還在研究中最爬。

參考:https://github.com/datastax/csharp-driver?spm=a2c4g.11186623.2.16.1ccd4c3e1nr5ti

1.安裝驅(qū)動

在Nuget管理搜索"CassandraCSharpDriver"或者命令安裝:


image.png
Install-Package CassandraCSharpDriver

2.使用linq進(jìn)行增刪改查

就像我們平時使用EF一樣涉馁,十分簡單:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Cassandra;
using Cassandra.Mapping;
using Cassandra.Data.Linq;

namespace ConsoleApp1
{
    public class User
    {
        public Guid UserId { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }

        public override string ToString()
        {
            return $"UserId: {UserId}, Name: {Name}, Age: {Age}";
        }
    }


    class Program
    {
        public ICluster Cluster { get; set; }
        public ISession Session { get; set; }
        public static Guid User0Guid { get; set; }

        private static void Main(string[] args)
        {
            new Program().MainAsync(args).GetAwaiter().GetResult();
        }

        private async Task MainAsync(string[] args)
        {
            User0Guid = Guid.NewGuid();
            // build cluster connection
            Cluster =
                Cassandra.Cluster.Builder()
                    .AddContactPoint("127.0.0.1")
                    .Build();

            //Set the Mapping Configuration
            MappingConfiguration.Global.Define(
               new Map<User>()
                  .TableName("users")
                  .PartitionKey(u => u.UserId)
                  .Column(u => u.UserId, cm => cm.WithName("id")));

            // create session
            Session = await Cluster.ConnectAsync().ConfigureAwait(false);

            // prepare schema
            await Session.ExecuteAsync(new SimpleStatement("CREATE KEYSPACE IF NOT EXISTS examples WITH replication = { 'class': 'SimpleStrategy', 'replication_factor': '1' }")).ConfigureAwait(false);
            await Session.ExecuteAsync(new SimpleStatement("USE examples")).ConfigureAwait(false);
            await Session.ExecuteAsync(new SimpleStatement("CREATE TABLE IF NOT EXISTS users(id uuid, name text, age int, PRIMARY KEY(id))")).ConfigureAwait(false);

            //以上,創(chuàng)建一個session


            try
            {
                //Create an instance of a Mapper from the session
                var users = new Table<User>(Session);
                await InsertOperations(users);
                await QueryOperations(users);
                await UpdateOperations(users);
                await DeleteOperations(users);
            }
            finally
            {
                await Cluster.ShutdownAsync().ConfigureAwait(false);
            }
        }

        /// <summary>
        /// Demonstrates how to delete via Linq
        /// 刪除
        /// </summary>
        /// <returns></returns>
        private static async Task DeleteOperations(Table<User> users)
        {
            // Delete
            await users.Where(u => u.UserId == User0Guid)
                  .Delete()
                  .ExecuteAsync();

            // Delete If 
            await users.Where(u => u.UserId == User0Guid)
                  .DeleteIf(u => u.Name == "User 0")
                  .ExecuteAsync();
        }

        /// <summary>
        /// Demonstrates the ability to update via Linq
        /// 更新
        /// </summary>
        /// <returns></returns>
        private static async Task UpdateOperations(Table<User> users)
        {
            await users.Where(u => u.UserId == User0Guid)
                .Select(u => new User { Name = "Update Linq" })
                .Update()
                .ExecuteAsync();
            var user = await users.Where(u => u.UserId == User0Guid).ExecuteAsync();
        }

        /// <summary>
        /// Demonstrates the different query methods allowed via Linq. 
        /// 查找
        /// </summary>
        /// <returns></returns>
        private static async Task QueryOperations(Table<User> users)
        {
            IEnumerable<User> usrs = await users.Select(a => a).ExecuteAsync();
            Console.WriteLine($"Retrieved {usrs.Count()} users");
            usrs = await users.Where(u => u.UserId == User0Guid).ExecuteAsync();
            Console.WriteLine($"Retrieved {usrs.Count()} users");
            var usr = await users.Where(u => u.UserId == User0Guid).First().ExecuteAsync();
            Console.WriteLine($"Retrieved {usr.ToString()}");
            usr = await users.Where(u => u.UserId == User0Guid).FirstOrDefault().ExecuteAsync();
            Console.WriteLine($"Retrieved {usr.ToString()}");
        }

        /// <summary>
        /// Demonstrates how to perform singular insert operations using Linq
        /// 添加
        /// </summary>
        /// <param name="users">The User table</param>
        /// <returns></returns>
        private static async Task InsertOperations(Table<User> users)
        {
            //Insert a single record using a POCO
            await users.Insert(new User() { UserId = User0Guid, Name = "User 0", Age = 0 }).ExecuteAsync();
        }
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末爱致,一起剝皮案震驚了整個濱河市烤送,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌糠悯,老刑警劉巖帮坚,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異互艾,居然都是意外死亡试和,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門纫普,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阅悍,“玉大人,你說我怎么就攤上這事昨稼〗谑樱” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵假栓,是天一觀的道長寻行。 經(jīng)常有香客問我,道長匾荆,這世上最難降的妖魔是什么寡痰? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮棋凳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘连躏。我一直安慰自己剩岳,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布入热。 她就那樣靜靜地躺著拍棕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪勺良。 梳的紋絲不亂的頭發(fā)上绰播,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機(jī)與錄音尚困,去河邊找鬼蠢箩。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的谬泌。 我是一名探鬼主播滔韵,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼掌实!你這毒婦竟也來了陪蜻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤贱鼻,失蹤者是張志新(化名)和其女友劉穎宴卖,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體邻悬,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡症昏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了拘悦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片齿兔。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖础米,靈堂內(nèi)的尸體忽然破棺而出分苇,到底是詐尸還是另有隱情,我是刑警寧澤屁桑,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布医寿,位于F島的核電站,受9級特大地震影響蘑斧,放射性物質(zhì)發(fā)生泄漏靖秩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一竖瘾、第九天 我趴在偏房一處隱蔽的房頂上張望沟突。 院中可真熱鬧,春花似錦捕传、人聲如沸惠拭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽职辅。三九已至,卻和暖如春聂示,著一層夾襖步出監(jiān)牢的瞬間域携,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工鱼喉, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留秀鞭,地道東北人趋观。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像气筋,于是被迫代替她去往敵國和親拆内。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354