इस प्रोजेक्ट के बारे में

# RedBase — .NET के लिए टाइप्ड ऑब्जेक्ट स्टोरेज RedBase .NET के लिए एक डेटा प्लेटफ़ॉर्म है जो टाइप्ड ऑब्जेक्ट्स को रिलेशनल बैकएंड (PostgreSQL, Microsoft SQL Server, या SQLite — जिसमें embedded/offline, Blazor WebAssembly और SQLite प्रोवाइडर के माध्यम से मोबाइल शामिल है) में संग्रहीत करता है। आप स्कीमा को सादे C# क्लासेस के रूप में परिभाषित करते हैं — RedBase एक ही LINQ-शैली API के माध्यम से स्टोरेज, इंडेक्सिंग, क्वेरींग, ट्री, लिस्ट, एग्रीगेशन और विंडो फ़ंक्शन को संभालता है। कोई Entity Framework नहीं। कोई माइग्रेशन नहीं। 40-टेबल Include चेन नहीं। बस C# क्लासेस और सेव करने के लिए एक लाइन, लोड करने के लिए एक लाइन। ## RedBase क्यों - **स्कीमा = C# क्लास**: अपनी क्लास में एक प्रॉपर्टी जोड़कर फ़ील्ड जोड़ें; `SyncSchemeAsync()` बाकी सब संभाल लेता है। कोई माइग्रेशन फ़ाइल नहीं। - **पूर्ण ऑब्जेक्ट ग्राफ**: नेस्टेड `RedbObject<T>` रेफ़रेंस (सिंगल, ऐरे, डिक्शनरी) एक ही कॉल में सेव और लोड होते हैं — कोई JOIN या Include चेन नहीं। - **स्ट्रॉन्ग टाइपिंग**: प्रत्येक प्रॉपर्टी FK कंस्ट्रेंट और इंडेक्स के साथ एक समर्पित टाइप्ड कॉलम से मैप होती है — JSON ब्लॉब्स नहीं। SQL स्तर पर क्वेरी करने योग्य। - **अंतर्निहित ट्री**: रिकर्सिव CTE, डेप्थ, एंसेस्टर्स और पाथ-टू-रूट के साथ `TreeQuery<T>()`। - **समृद्ध क्वेरी API**: Where फ़िल्टर, प्रोजेक्शन, GroupBy, एग्रीगेशन और विंडो फ़ंक्शन (ROW_NUMBER, RANK, LAG/LEAD, NTILE, कस्टम फ़्रेम) सहित पूर्ण LINQ समर्थन। - **एकाधिक प्रोवाइडर**: PostgreSQL, MSSQL, और SQLite (Blazor WebAssembly और मोबाइल के लिए शुद्ध C# सहित)। ## त्वरित शुरुआत ```csharp // 1. एक स्कीमा परिभाषित करें — यही आपका "माइग्रेशन" है [RedbScheme("Employee")] public class EmployeeProps { public string FirstName { get; set; } = ""; public string LastName { get; set; } = ""; public int Age { get; set; } public decimal Salary { get; set; } public string Department { get; set; } = ""; public string Position { get; set; } = ""; public DateTime HireDate { get; set; } public string[]? Skills { get; set; } public Address? HomeAddress { get; set; } public Dictionary<int, decimal>? BonusByYear { get; set; } } // 2. स्कीमा सिंक करें (स्टोरेज स्वचालित रूप से बनाता है) await redb.SyncSchemeAsync<EmployeeProps>(); // 3. सेव करें var employee = new RedbObject<EmployeeProps> { name = "New Developer", Props = new EmployeeProps { FirstName = "Alice", LastName = "Johnson", Age = 28, Position = "Developer", Department = "Engineering", Salary = 85000m, HireDate = DateTime.Today, Skills = ["C#", "React", "SQL"] } }; await redb.SaveAsync(employee); // 4. लोड करें var loaded = await redb.LoadAsync<EmployeeProps>(employee.Id); // 5. क्वेरी करें var results = await redb.Query<EmployeeProps>() .Where(e => e.Salary > 75000m) .OrderByDescending(e => e.Salary) .Take(100) .ToListAsync(); ``` ## पैकेज | पैकेज | विवरण | |---------|-------------| | `redb.Core` | कोर एब्स्ट्रैक्शन, क्वेरी बिल्डर, LINQ प्रोवाइडर | | `redb.Postgres` | PostgreSQL प्रोवाइडर (मुफ़्त, Apache 2.0) | | `redb.MSSql` | Microsoft SQL Server प्रोवाइडर (मुफ़्त, Apache 2.0) | | `redb.SQLite` | SQLite प्रोवाइडर (मुफ़्त, Apache 2.0) — embedded/offline, नेटिव लोडेबल एक्सटेंशन | | `redb.Core.Pro` | Pro एक्सटेंशन: समानांतर मटेरियलाइज़ेशन, चेंज ट्रैकिंग, माइग्रेशन | | `redb.Postgres.Pro` | ऑप्टिमाइज़्ड क्वेरी जनरेशन के साथ PostgreSQL Pro प्रोवाइडर | | `redb.MSSql.Pro` | ऑप्टिमाइज़्ड क्वेरी जनरेशन के साथ MSSQL Pro प्रोवाइडर | | `redb.SQLite.Pro` | SQLite Pro प्रोवाइडर — शुद्ध C# (कोई नेटिव एक्सटेंशन नहीं): Blazor WebAssembly और मोबाइल | | `redb.Export` | डेटाबेस एक्सपोर्ट/इम्पोर्ट: बैकअप के लिए `.redb` फ़ाइलें (JSONL/ZIP), PostgreSQL ↔ MSSQL के बीच माइग्रेशन | ## क्षमताएँ ### CRUD - सिंगल या बैच ऑब्जेक्ट्स सेव करें - पूर्ण ऑब्जेक्ट ग्राफ के साथ ID द्वारा लोड करें - COPY प्रोटोकॉल के माध्यम से बल्क इंसर्ट - वैकल्पिक purge के साथ डिलीट ### समृद्ध Props संरचना Props में स्केलर, नेस्टेड क्लासेस, ऐरे, डिक्शनरी (ट्यूपल कीज़ सहित), और `RedbObject` रेफ़रेंस — मनमाने ढंग से गहरे — शामिल हो सकते हैं। सभी एक ही कॉल में सेव और लोड होते हैं। ### क्वेरी सुविधाएँ - **Where फ़िल्टर**: तुलना, AND/OR/NOT, `WhereIn`, nullable चेक, बेस-फ़ील्ड फ़िल्टर - **स्ट्रिंग ऑपरेशन**: Contains, StartsWith, केस-इनसेंसिटिव (गैर-अंग्रेज़ी टेक्स्ट के लिए ICU कोलेशन समर्थन सहित) - **नेस्टेड प्रॉपर्टीज़**: किसी भी गहराई पर नेस्टेड क्लास फ़ील्ड्स पर फ़िल्टर करें - **ऐरे ऑपरेशन**: एलिमेंट Contains, कोई भी/सभी संयोजन - **डिक्शनरी ऑपरेशन**: ContainsKey, इंडेक्सर फ़िल्टर, नेस्टेड वैल्यूज़ - **प्रोजेक्शन और पेजिनेशन**: Select, Distinct, OrderBy/ThenBy, Skip/Take, FirstOrDefault - **एग्रीगेशन**: Sum, Average, Min/Max, बैच एग्रीगेशन, फ़िल्टर्ड एग्रीगेशन - **GroupBy**: सिंगल या कंपोज़िट कीज़, ऐरे एलिमेंट ग्रुपिंग - **विंडो फ़ंक्शन**: ROW_NUMBER, RANK, DENSE_RANK, रनिंग सम्स, LAG/LEAD, FIRST/LAST_VALUE, NTILE, कस्टम फ़्रेम ### ट्री संरचनाएँ क्लोज़र-टेबल स्टोरेज और रिकर्सिव CTE के साथ अंतर्निहित पदानुक्रमित डेटा: - चाइल्ड नोड्स बनाएँ - डेप्थ लिमिट के साथ पूरा ट्री लोड करें - चिल्ड्रन/डिसेंडेंट्स प्राप्त करें - रूट तक का पाथ ## इंस्टॉलेशन ```bash # PostgreSQL (मुफ़्त) dotnet add package redb.Postgres # या MSSQL (मुफ़्त) dotnet add package redb.MSSql # Pro — redb.Core.Pro स्वचालित रूप से शामिल dotnet add package redb.Postgres.Pro # या redb.MSSql.Pro ``` ## सेटअप ```csharp using redb.Core; using redb.Core.Extensions; using redb.Postgres.Pro.Extensions; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRedbPro(options => options .UsePostgres("Host=localhost;Database=mydb;Username=postgres;Password=pass") .Configure(c => { c.PropsSaveStrategy = PropsSaveStrategy.ChangeTracking; c.EnableLazyReferences = false; c.EnablePropsCache = true; })); var app = builder.Build(); var redb = app.Services.GetRequiredService<IRedbService>(); await redb.InitializeAsync(); await redb.SyncSchemeAsync<EmployeeProps>(); ``` मुफ़्त संस्करण `AddRedbPro` के बजाय `AddRedb` का उपयोग करता है। ## डेटाबेस सेटअप विकल्प - स्टार्टअप पर स्वचालित (`InitializeAsync(ensureCreated: true)`) - स्पष्ट कॉल (`EnsureDatabaseAsync()` + `InitializeAsync()`) - DBA/CI के लिए SQL स्क्रिप्ट एक्सपोर्ट करें (`GetSchemaScript()`) - CLI टूल (`redb init`, `redb schema`) ## क्लाइंट-साइड: Blazor WebAssembly और मोबाइल दोनों `redb.SQLite.Pro` (शुद्ध C#) पर चलते हैं। मोबाइल को कुछ विशेष की आवश्यकता नहीं है; Blazor WebAssembly के लिए नेटिव रीलिंक, मैनुअल इनिशियलाइज़ेशन, और एप्लिकेशन-स्तरीय पर्सिस्टेंस की आवश्यकता होती है। ## लाइसेंस मुफ़्त पैकेजों के लिए Apache 2.0; Pro पैकेजों के लिए लाइसेंस आवश्यक है (SQLite.Pro के लिए 3.x/4.x लाइनों पर आवश्यक नहीं)।