Nmemory - Getting Started - Cascaded Operation - Example 2

CSharp · Console

/Program.cs

// NMemory
// Doc: https://nmemory.net/cascaded-operation

// @nuget: NMemory

using System;
using System.Linq;
using NMemory;
using NMemory.Indexes;
using NMemory.Tables;
					
public class Program
{
	public static void Main()
	{
		MyDatabase myDatabase = new MyDatabase();

		myDatabase.Groups.Insert(new Group() { Id = 1});

		myDatabase.Members.Insert(new Member() { Id = 1, GroupId = 1, Name = "It's Member_1" });

		myDatabase.Members.Insert(new Member() { Id = 2, Name = "It's Member_2" });

		myDatabase.Groups.Delete(new Group { Id = 1 });

		FiddleHelper.WriteTable("All Members",myDatabase.Members.ToList());
	}
	
	public class MyDatabase : Database
	{
		public MyDatabase()
		{
			var members = this.Tables.Create<Member, int>(x => x.Id);
			var groups = base.Tables.Create<Group, int>(g => g.Id);

			this.Members = members;
			this.Groups = groups;

			RelationOptions options = new RelationOptions(
				cascadedDeletion: true);

			var peopleGroupIdIndex = members.CreateIndex(
				new RedBlackTreeIndexFactory(),
				p => p.GroupId);

			this.Tables.CreateRelation(
				groups.PrimaryKeyIndex,
				peopleGroupIdIndex,
				x =>  x ?? -1,
				x => x,
				options);
		}

		public ITable<Member> Members { get; private set; }

		public ITable<Group> Groups { get; private set; }
	}

	public class Member
	{
		public int Id { get; set; }

		public string Name { get; set; }

		public int? GroupId { get; set; } 
	}

	public class Group
	{
		public int Id { get; set; } 

		public string Name { get; set; }

	}
	
}
;