EasilyNET.Core.Domains 2.1.6

The owner has unlisted this package. This could mean that the package is deprecated, has security vulnerabilities or shouldn't be used anymore.
dotnet add package EasilyNET.Core.Domains --version 2.1.6
                    
NuGet\Install-Package EasilyNET.Core.Domains -Version 2.1.6
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="EasilyNET.Core.Domains" Version="2.1.6" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="EasilyNET.Core.Domains" Version="2.1.6" />
                    
Directory.Packages.props
<PackageReference Include="EasilyNET.Core.Domains" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add EasilyNET.Core.Domains --version 2.1.6
                    
#r "nuget: EasilyNET.Core.Domains, 2.1.6"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#addin nuget:?package=EasilyNET.Core.Domains&version=2.1.6
                    
Install as a Cake Addin
#tool nuget:?package=EasilyNET.Core.Domains&version=2.1.6
                    
Install as a Cake Tool
EasilyNET.Core.Domains

领域相关东西

Nuget

使用 Nuget 包管理工具添加依赖包 EasilyNET.Core.Domains

核心
  • 实体(Entity、Entity<>)(必须的) 有唯一标识,通过ID判断相等性,增删查改、持续化,可变的,使用IRepository访问数据时必须继承,可以自定义ID类型。

public class User : Entity<long>
{
   public string Name{get;set;}
   public Test Test {get;set;}
}
  • 聚合根(IAggregateRoot) 表示聚合根
表示用户聚合
public class User : Entity<long>,IAggregateRoot
{
   public string Name{get;set;}
   
   public List<UserRole> UserRoles {get;set;}
}

表示角色聚合
public class Role : Entity<long>,IAggregateRoot
{
   public string Name{get;set;}
}

//举例使用值对象
public class UserRole : ValueObject
{

  public long UserId{get;set;}
  public long RoleId{get;set;}
  public override IEnumerable<object> GetAtomicValues()
  {
      yield return UserId;
      yield return RoleId;
  }
}
  • 值对象(ValueObject)无唯一标识,不可以变的,通过属性判断相等性,即时创建、用完即扔。

  public sealed class Test(int a, string b, string c) : ValueObject
    {
        private int A { get; } = a;

        private string B { get; } = b;

        private string C { get; } = c;

        /// <inheritdoc />
        protected override IEnumerable<object> GetAtomicValues()
        {
            yield return A;
            yield return B;
            yield return C;
        }
    }
  • 创建者ID(IMayHaveCreator)

  public sealed class xxxxx : IMayHaveCreator<long?>
    {
      
        public  long? CreatorId { get; set; }
    }
  • 创建时间(IHasCreationTime)

  public sealed class xxxxx : IHasCreationTime
    {
      
        public DateTime CreationTime { get; set; }
    }
  • 修改者ID(IHasModifierId)

  public sealed class xxxxx : IHasModifierId<long?>
    {
      
        public long? LastModifierId { get; set; }
    }
  • 修改时间(IHasModificationTime)

  public sealed class xxxxx : IHasModificationTime
    {
      
        public DateTime LastModificationTime { get; set; }
    }
  • 软删除(IHasSoftDelete)
   因为这个属性只是查询时候用到,所以在EF Core低层实现,查询时候过滤已删除数据,假如是删除,把字段设置已删除,而不是把数据删除
   public sealed class xxxxx : IHasSoftDelete
    {
      

    }
  • 删除时间(IHasDeletionTime),他继承了IHasSoftDelete接口,如果使用该接口,就不用添加IHasSoftDelete接口
   因为这个属性只是查询时候用到,所以在EF Core低层实现,查询时候过滤已删除数据,假如是删除,把字段设置已删除,而不是把数据删除
   public sealed class xxxxx : IHasDeletionTime
    {
      
       public DateTime? DeletionTime { get; set; }
    }
  • 删除者Id(IHasDeleterId)
  
   public sealed class xxxxx : IHasDeleterId<long?>
    {
      
       public long? DeleterId { get; set; }
    }
  • 仓储 (IRepository)实现增删改查,必须继承Entity抽象类才可以使用
     本层只是抽象

     _serviceCollection.AddScoped<IUserRepository, UserRepository>();

    
     _serviceCollection.AddScoped(typeof(IRepository<,>), typeof(Repository<,>));
     可以使用以下方式:
     ---------------------------------------------
     添加依赖包 EasilyNET.EntityFrameworkCore
     _serviceCollection.AddRepository(); 只注入IRepository<,>,不注入IUserRepository,IUserRepository可以使用自动注入
     ---------------------------------------------

     public interface IUserRepository : IRepository<User, long>;

     /// <summary>
     /// UserRepository
     /// </summary>
     /// <param name="dbContext"></param>
     public class UserRepository(TestDbContext dbContext) : RepositoryBase<User, long, TestDbContext>(dbContext), IUserRepository;

     调用IRepository<User,Long>、IUserRepository
  • 领域事件 (IDomainEvent)
 注册中者中间件,低层是使用MediatR实现的
 Service.AddMediatR(cfg => { cfg.RegisterServicesFromAssembly(Assembly.GetExecutingAssembly()); });

internal sealed record AddUserDomainEvent(User User) : IDomainEvent;

internal sealed class AddUserDomainEventHandler : IDomainEventHandler<AddUserDomainEvent>
{
    /// <inheritdoc />
    public Task Handle(AddUserDomainEvent notification, CancellationToken cancellationToken)
    {
        Debug.WriteLine($"创建用户{notification.User.Id}_{notification.User.Name}");
        return Task.CompletedTask;
    }
}


public sealed class User : Entity<long>
{
    private User() { }

    public User(string name, int age)
    {
        Name = name;
        Age = age;
        AddDomainEvent(new AddUserDomainEvent(this));  //添加领域事件
    }

    public string Name { get; private set; } = default!;

    public int Age { get; }

}

** 如果这里添加,领域事件的话,当IUnitOfWork.SaveChangesAsync()时侯会发布领域事件,不用手动发布。
Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated