इस प्रोजेक्ट के बारे में
# 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 लाइनों पर आवश्यक नहीं)।
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.