This repository has been archived by the owner on Aug 1, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 19
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(EntityFramework): EntityFramework adds soft delete (#30)
### Feat: * EntityFramework: adds soft delete and Support data filtering (#30) * EntityFramework: Newly added Cosmos, InMemory, MySql, Oracle, MySql, PostgreSql, Sqlite, SqlServer extensions, easier to use (#30) ### Perf * Expressions: Extend And 、Or methods (#30) ### Test: * EntityFramework: adds unit tests (#30) ### Refactor * EntityFramework: refactor MasaDbContext and MasaDbContextOptions (#30)
- Loading branch information
1 parent
c79d0b2
commit c2b6af7
Showing
75 changed files
with
1,649 additions
and
103 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
23 changes: 23 additions & 0 deletions
23
src/Data/Masa.Utils.Data.EntityFrameworkCore.Cosmos/Internal/Parser.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
namespace Masa.Utils.Data.EntityFrameworkCore.Cosmos.Internal; | ||
|
||
internal static class Parser | ||
{ | ||
public static Dictionary<string, string> ToDictionary(this string connectionString) | ||
{ | ||
if (string.IsNullOrEmpty(connectionString)) | ||
throw new ArgumentException("Cosmos: empty database connection string", nameof(connectionString)); | ||
|
||
Dictionary<string, string> dictionary = new(); | ||
foreach (var item in connectionString.Split(';')) | ||
{ | ||
if (string.IsNullOrEmpty(item)) | ||
continue; | ||
|
||
if (item.Split('=').Length != 2) | ||
throw new ArgumentException("Cosmos: Bad database connection string"); | ||
|
||
dictionary.Add(item.Split('=')[0], item.Split('=')[1]); | ||
} | ||
return dictionary; | ||
} | ||
} |
17 changes: 17 additions & 0 deletions
17
...a.Utils.Data.EntityFrameworkCore.Cosmos/Masa.Utils.Data.EntityFrameworkCore.Cosmos.csproj
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
<Project Sdk="Microsoft.NET.Sdk"> | ||
|
||
<PropertyGroup> | ||
<TargetFramework>net6.0</TargetFramework> | ||
<ImplicitUsings>enable</ImplicitUsings> | ||
<Nullable>enable</Nullable> | ||
</PropertyGroup> | ||
|
||
<ItemGroup> | ||
<PackageReference Include="Microsoft.EntityFrameworkCore.Cosmos" Version="6.0.0" /> | ||
</ItemGroup> | ||
|
||
<ItemGroup> | ||
<ProjectReference Include="..\Masa.Utils.Data.EntityFrameworkCore\Masa.Utils.Data.EntityFrameworkCore.csproj" /> | ||
</ItemGroup> | ||
|
||
</Project> |
45 changes: 45 additions & 0 deletions
45
src/Data/Masa.Utils.Data.EntityFrameworkCore.Cosmos/MasaDbContextOptionsBuilderExtensions.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
namespace Masa.Utils.Data.EntityFrameworkCore.Cosmos; | ||
|
||
public static class MasaDbContextOptionsBuilderExtensions | ||
{ | ||
public static MasaDbContextOptionsBuilder UseCosmos( | ||
this MasaDbContextOptionsBuilder builder, | ||
Action<CosmosDbContextOptionsBuilder>? cosmosOptionsAction = null) | ||
{ | ||
var connectionStringProvider = builder.ServiceProvider.GetRequiredService<IConnectionStringProvider>(); | ||
var configurationDic = connectionStringProvider.GetConnectionString().ToDictionary(); | ||
|
||
if (!configurationDic.TryGetValue("Database", out string? databaseName)) | ||
throw new ArgumentException("Cosmos: Bad database connection string, Failed to get [Database] name"); | ||
|
||
if (configurationDic.TryGetValue("ConnectionString", out string? connectionString)) | ||
return builder.UseCosmos(connectionString, databaseName, cosmosOptionsAction); | ||
|
||
if (!configurationDic.TryGetValue("AccountKey", out string? accountKey) || | ||
!configurationDic.TryGetValue("AccountEndpoint", out string? accountEndpoint)) | ||
throw new ArgumentException("Cosmos: Bad database connection string, Failed to get [AccountKey] name or [AccountEndpoint] name"); | ||
|
||
return builder.UseCosmos(accountEndpoint, accountKey, databaseName, cosmosOptionsAction); | ||
} | ||
|
||
public static MasaDbContextOptionsBuilder UseCosmos( | ||
this MasaDbContextOptionsBuilder builder, | ||
string accountEndpoint, | ||
string accountKey, | ||
string databaseName, | ||
Action<CosmosDbContextOptionsBuilder>? cosmosOptionsAction = null) | ||
{ | ||
builder.DbContextOptionsBuilder.UseCosmos(accountEndpoint, accountKey, databaseName, cosmosOptionsAction); | ||
return builder; | ||
} | ||
|
||
public static MasaDbContextOptionsBuilder UseCosmos( | ||
this MasaDbContextOptionsBuilder builder, | ||
string connectionString, | ||
string databaseName, | ||
Action<CosmosDbContextOptionsBuilder>? cosmosOptionsAction = null) | ||
{ | ||
builder.DbContextOptionsBuilder.UseCosmos(connectionString, databaseName, cosmosOptionsAction); | ||
return builder; | ||
} | ||
} |
34 changes: 34 additions & 0 deletions
34
src/Data/Masa.Utils.Data.EntityFrameworkCore.Cosmos/README.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
[中](README.zh-CN.md) | EN | ||
|
||
## Masa.Utils.Data.EntityFrameworkCore.Cosmos | ||
|
||
## Example: | ||
|
||
```c# | ||
Install-Package Masa.Utils.Data.EntityFrameworkCore.Cosmos | ||
``` | ||
|
||
##### Usage 1: | ||
|
||
1. Configure appsettings.json | ||
|
||
``` appsettings.json | ||
{ | ||
"ConnectionStrings": { | ||
"DefaultConnection": "AccountKey=AccountKey;AccountEndpoint=AccountEndpoint;Database=Database"// or "ConnectionString=ConnectionString;Database=Database" | ||
} | ||
} | ||
``` | ||
|
||
2. Using MasaDbContext | ||
|
||
``` C# | ||
builder.Services.AddMasaDbContext<CustomDbContext>(optionsBuilder => optionsBuilder.UseSoftDelete().UseCosmos()); | ||
``` | ||
|
||
##### Usage 2: | ||
|
||
``` C# | ||
builder.Services.AddMasaDbContext<CustomDbContext>(optionsBuilder => optionsBuilder.UseSoftDelete().UseCosmos($"{accountEndpoint}",$"{accountKey}",$"{databaseName}")); | ||
//builder.Services.AddMasaDbContext<CustomDbContext>(optionsBuilder => optionsBuilder.UseSoftDelete().UseCosmos($"{connectionString}",$"{databaseName}")); | ||
``` |
34 changes: 34 additions & 0 deletions
34
src/Data/Masa.Utils.Data.EntityFrameworkCore.Cosmos/README.zh-CN.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
中 | [EN](README.md) | ||
|
||
## Masa.Utils.Data.EntityFrameworkCore.Cosmos | ||
|
||
## 用例: | ||
|
||
```c# | ||
Install-Package Masa.Utils.Data.EntityFrameworkCore.Cosmos | ||
``` | ||
|
||
#### 用法1: | ||
|
||
1. 配置appsettings.json | ||
|
||
``` appsettings.json | ||
{ | ||
"ConnectionStrings": { | ||
"DefaultConnection": "AccountKey=AccountKey;AccountEndpoint=AccountEndpoint;Database=Database"//或"ConnectionString=ConnectionString;Database=Database" | ||
} | ||
} | ||
``` | ||
|
||
2. 使用MasaDbContext | ||
|
||
``` C# | ||
builder.Services.AddMasaDbContext<CustomDbContext>(optionsBuilder => optionsBuilder.UseSoftDelete().UseCosmos()); | ||
``` | ||
|
||
#### 用法2: | ||
|
||
``` C# | ||
builder.Services.AddMasaDbContext<CustomDbContext>(optionsBuilder => optionsBuilder.UseSoftDelete().UseCosmos($"{accountEndpoint}",$"{accountKey}",$"{databaseName}")); | ||
//builder.Services.AddMasaDbContext<CustomDbContext>(optionsBuilder => optionsBuilder.UseSoftDelete().UseCosmos($"{connectionString}",$"{databaseName}")); | ||
``` |
4 changes: 4 additions & 0 deletions
4
src/Data/Masa.Utils.Data.EntityFrameworkCore.Cosmos/_Imports.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
global using Masa.Utils.Data.EntityFrameworkCore.Cosmos.Internal; | ||
global using Microsoft.EntityFrameworkCore; | ||
global using Microsoft.EntityFrameworkCore.Infrastructure; | ||
global using Microsoft.Extensions.DependencyInjection; |
17 changes: 17 additions & 0 deletions
17
...ils.Data.EntityFrameworkCore.InMemory/Masa.Utils.Data.EntityFrameworkCore.InMemory.csproj
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
<Project Sdk="Microsoft.NET.Sdk"> | ||
|
||
<PropertyGroup> | ||
<TargetFramework>net6.0</TargetFramework> | ||
<ImplicitUsings>enable</ImplicitUsings> | ||
<Nullable>enable</Nullable> | ||
</PropertyGroup> | ||
|
||
<ItemGroup> | ||
<ProjectReference Include="..\Masa.Utils.Data.EntityFrameworkCore\Masa.Utils.Data.EntityFrameworkCore.csproj" /> | ||
</ItemGroup> | ||
|
||
<ItemGroup> | ||
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="6.0.0" /> | ||
</ItemGroup> | ||
|
||
</Project> |
21 changes: 21 additions & 0 deletions
21
...ata/Masa.Utils.Data.EntityFrameworkCore.InMemory/MasaDbContextOptionsBuilderExtensions.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
namespace Masa.Utils.Data.EntityFrameworkCore.InMemory; | ||
|
||
public static class MasaDbContextOptionsBuilderExtensions | ||
{ | ||
public static MasaDbContextOptionsBuilder UseInMemoryDatabase( | ||
this MasaDbContextOptionsBuilder builder, | ||
Action<InMemoryDbContextOptionsBuilder>? inMemoryOptionsAction = null) | ||
{ | ||
var connectionStringProvider = builder.ServiceProvider.GetRequiredService<IConnectionStringProvider>(); | ||
return builder.UseInMemoryDatabase(connectionStringProvider.GetConnectionString(), inMemoryOptionsAction); | ||
} | ||
|
||
public static MasaDbContextOptionsBuilder UseInMemoryDatabase( | ||
this MasaDbContextOptionsBuilder builder, | ||
string databaseName, | ||
Action<InMemoryDbContextOptionsBuilder>? inMemoryOptionsAction = null) | ||
{ | ||
builder.DbContextOptionsBuilder.UseInMemoryDatabase(databaseName, inMemoryOptionsAction); | ||
return builder; | ||
} | ||
} |
33 changes: 33 additions & 0 deletions
33
src/Data/Masa.Utils.Data.EntityFrameworkCore.InMemory/README.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
[中](README.zh-CN.md) | EN | ||
|
||
## Masa.Utils.Data.EntityFrameworkCore.InMemory | ||
|
||
## Example: | ||
|
||
```c# | ||
Install-Package Masa.Utils.Data.EntityFrameworkCore.InMemory | ||
``` | ||
|
||
##### Usage 1: | ||
|
||
1. Configure appsettings.json | ||
|
||
``` appsettings.json | ||
{ | ||
"ConnectionStrings": { | ||
"DefaultConnection": "identity" | ||
} | ||
} | ||
``` | ||
|
||
2. Using MasaDbContext | ||
|
||
``` C# | ||
builder.Services.AddMasaDbContext<CustomDbContext>(optionsBuilder => optionsBuilder.UseSoftDelete().UseInMemoryDatabase()); | ||
``` | ||
|
||
##### Usage 2: | ||
|
||
``` C# | ||
builder.Services.AddMasaDbContext<CustomDbContext>(optionsBuilder => optionsBuilder.UseSoftDelete().UseInMemoryDatabase("identity")); | ||
``` |
33 changes: 33 additions & 0 deletions
33
src/Data/Masa.Utils.Data.EntityFrameworkCore.InMemory/README.zh-CN.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
中 | [EN](README.md) | ||
|
||
## Masa.Utils.Data.EntityFrameworkCore.InMemory | ||
|
||
## 用例: | ||
|
||
```c# | ||
Install-Package Masa.Utils.Data.EntityFrameworkCore.InMemory | ||
``` | ||
|
||
#### 用法1: | ||
|
||
1. 配置appsettings.json | ||
|
||
``` appsettings.json | ||
{ | ||
"ConnectionStrings": { | ||
"DefaultConnection": "identity" | ||
} | ||
} | ||
``` | ||
|
||
2. 使用MasaDbContext | ||
|
||
``` C# | ||
builder.Services.AddMasaDbContext<CustomDbContext>(optionsBuilder => optionsBuilder.UseSoftDelete().UseInMemoryDatabase()); | ||
``` | ||
|
||
#### 用法2: | ||
|
||
``` C# | ||
builder.Services.AddMasaDbContext<CustomDbContext>(optionsBuilder => optionsBuilder.UseSoftDelete().UseInMemoryDatabase("identity")); | ||
``` |
3 changes: 3 additions & 0 deletions
3
src/Data/Masa.Utils.Data.EntityFrameworkCore.InMemory/_Imports.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
global using Microsoft.EntityFrameworkCore; | ||
global using Microsoft.EntityFrameworkCore.Infrastructure; | ||
global using Microsoft.Extensions.DependencyInjection; |
17 changes: 17 additions & 0 deletions
17
...asa.Utils.Data.EntityFrameworkCore.MySql/Masa.Utils.Data.EntityFrameworkCore.MySql.csproj
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
<Project Sdk="Microsoft.NET.Sdk"> | ||
|
||
<PropertyGroup> | ||
<TargetFramework>net6.0</TargetFramework> | ||
<ImplicitUsings>enable</ImplicitUsings> | ||
<Nullable>enable</Nullable> | ||
</PropertyGroup> | ||
|
||
<ItemGroup> | ||
<ProjectReference Include="..\Masa.Utils.Data.EntityFrameworkCore\Masa.Utils.Data.EntityFrameworkCore.csproj" /> | ||
</ItemGroup> | ||
|
||
<ItemGroup> | ||
<PackageReference Include="MySql.EntityFrameworkCore" Version="6.0.0" /> | ||
</ItemGroup> | ||
|
||
</Project> |
Oops, something went wrong.