mirror of https://github.com/abpframework/abp.git
8 changed files with 173 additions and 1 deletions
@ -0,0 +1,16 @@ |
|||
namespace Volo.Abp |
|||
{ |
|||
/// <summary>
|
|||
/// Used to standardize soft deleting entities.
|
|||
/// Soft-delete entities are not actually deleted,
|
|||
/// marked as IsDeleted = true in the database,
|
|||
/// but can not be retrieved to the application normally.
|
|||
/// </summary>
|
|||
public interface ISoftDelete |
|||
{ |
|||
/// <summary>
|
|||
/// Used to mark an Entity as 'Deleted'.
|
|||
/// </summary>
|
|||
bool IsDeleted { get; set; } |
|||
} |
|||
} |
|||
@ -0,0 +1,70 @@ |
|||
// <auto-generated />
|
|||
using Microsoft.EntityFrameworkCore; |
|||
using Microsoft.EntityFrameworkCore.Infrastructure; |
|||
using Microsoft.EntityFrameworkCore.Metadata; |
|||
using Microsoft.EntityFrameworkCore.Migrations; |
|||
using Microsoft.EntityFrameworkCore.Storage; |
|||
using Microsoft.EntityFrameworkCore.Storage.Internal; |
|||
using System; |
|||
using Volo.Abp.TestApp.Domain; |
|||
using Volo.Abp.TestApp.EntityFrameworkCore; |
|||
|
|||
namespace Volo.Abp.EntityFrameworkCore.Tests.Migrations |
|||
{ |
|||
[DbContext(typeof(TestAppDbContext))] |
|||
[Migration("20171026101049_Added_IsDeleted_To_Person")] |
|||
partial class Added_IsDeleted_To_Person |
|||
{ |
|||
protected override void BuildTargetModel(ModelBuilder modelBuilder) |
|||
{ |
|||
#pragma warning disable 612, 618
|
|||
modelBuilder |
|||
.HasAnnotation("ProductVersion", "2.0.0-rtm-26452"); |
|||
|
|||
modelBuilder.Entity("Volo.Abp.TestApp.Domain.Person", b => |
|||
{ |
|||
b.Property<Guid>("Id") |
|||
.ValueGeneratedOnAdd(); |
|||
|
|||
b.Property<int>("Age"); |
|||
|
|||
b.Property<bool>("IsDeleted"); |
|||
|
|||
b.Property<string>("Name"); |
|||
|
|||
b.Property<Guid?>("TenantId"); |
|||
|
|||
b.HasKey("Id"); |
|||
|
|||
b.ToTable("People"); |
|||
}); |
|||
|
|||
modelBuilder.Entity("Volo.Abp.TestApp.Domain.Phone", b => |
|||
{ |
|||
b.Property<long>("Id") |
|||
.ValueGeneratedOnAdd(); |
|||
|
|||
b.Property<string>("Number"); |
|||
|
|||
b.Property<Guid>("PersonId"); |
|||
|
|||
b.Property<int>("Type"); |
|||
|
|||
b.HasKey("Id"); |
|||
|
|||
b.HasIndex("PersonId"); |
|||
|
|||
b.ToTable("AppPhones"); |
|||
}); |
|||
|
|||
modelBuilder.Entity("Volo.Abp.TestApp.Domain.Phone", b => |
|||
{ |
|||
b.HasOne("Volo.Abp.TestApp.Domain.Person") |
|||
.WithMany("Phones") |
|||
.HasForeignKey("PersonId") |
|||
.OnDelete(DeleteBehavior.Cascade); |
|||
}); |
|||
#pragma warning restore 612, 618
|
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,26 @@ |
|||
using Microsoft.EntityFrameworkCore.Migrations; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Volo.Abp.EntityFrameworkCore.Tests.Migrations |
|||
{ |
|||
public partial class Added_IsDeleted_To_Person : Migration |
|||
{ |
|||
protected override void Up(MigrationBuilder migrationBuilder) |
|||
{ |
|||
migrationBuilder.AddColumn<bool>( |
|||
name: "IsDeleted", |
|||
table: "People", |
|||
type: "INTEGER", |
|||
nullable: false, |
|||
defaultValue: false); |
|||
} |
|||
|
|||
protected override void Down(MigrationBuilder migrationBuilder) |
|||
{ |
|||
migrationBuilder.DropColumn( |
|||
name: "IsDeleted", |
|||
table: "People"); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,26 @@ |
|||
using System.Linq; |
|||
using Shouldly; |
|||
using Volo.Abp.Domain.Repositories; |
|||
using Volo.Abp.TestApp.Domain; |
|||
using Xunit; |
|||
|
|||
namespace Volo.Abp.EntityFrameworkCore.Repositories |
|||
{ |
|||
public class SoftDelete_Filter_Tests : EntityFrameworkCoreTestBase |
|||
{ |
|||
private readonly IRepository<Person> _personRepository; |
|||
|
|||
public SoftDelete_Filter_Tests() |
|||
{ |
|||
_personRepository = GetRequiredService<IRepository<Person>>(); |
|||
} |
|||
|
|||
[Fact] |
|||
public void Should_Not_Get_Deleted_Entities_By_Default() |
|||
{ |
|||
var people = _personRepository.GetList(); |
|||
people.Count.ShouldBe(1); |
|||
people.Any(p => p.Name == "Douglas").ShouldBeTrue(); |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue