1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/vincywindy-fur-extension-pack

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Fur.ExtensionPack

Build status Nuget (with prereleases)

介绍

Это полезный пакет расширений для базовой функциональности Fur.

Установка

  1. nuget Install-Package Fur.ExtensionPack

Использование

1. Аудит

Для большинства сущностей необходимо записывать в базу данных время их создания и изменения, а также информацию об операторе. Этот пакет расширения поддерживает автоматическое управление временем создания и изменения сущностей.

Использование

Измените базу данных на основе AppDbContext на AuditingDbContext.

    [AppDbContext("Sqlite3ConnectionString")]
    public class FurDbContext : AuditingDbContext<FurDbContext>//<=AppDbContext<FurDbContext>
    {
        public FurDbContext(DbContextOptions<FurDbContext> options) : base(options)
        {

        }
        protected override void SavingChangesEvent(object sender, SavingChangesEventArgs e)
        {

        }

    }

Затем добавьте интерфейсы ICreationTime и IUpdateTime к сущностям, для которых требуется автоматическое управление временем.

 public class Person : Entity,ICreationTime,IUpdateTime
    {
        /// <summary>
        /// 构造函数
        /// </summary>
        public Person()
        {
            //此行已经不需要,由系统自动管理
            CreatedTime = DateTime.Now;
            IsDeleted = false;
        }

        /// <summary>
        /// 姓名
        /// </summary>
        [MaxLength(32)]
        public string Name { get; set; }
        。。。
    }

Таким образом, при создании новой сущности будет автоматически обновляться время создания, а при изменении — записываться время изменения. Кроме того, предотвращается изменение времени создания при обновлении.

2. Исправление поведения Mapster

В Fur используется Mapster в качестве инструмента отображения. Это мощный и эффективный инструмент. Однако у него есть некоторые недостатки: когда дочерние сущности списка отображаются одновременно как обновление, Mapster сначала очищает список, а затем вставляет его. Это нормально, но для EF это означает, что каждая дочерняя сущность полностью изменена, и для каждой из них генерируется полный SQL-запрос на обновление. Для сложных сущностей это может серьёзно повлиять на производительность. Чтобы решить эту проблему, необходимо сообщить Mapster, какое поле является первичным ключом сущности, и позволить ему найти соответствующее отношение на основе первичного ключа. В этом пакете расширения предоставляется метод расширения AdaptToTrack, который можно легко вызвать для достижения этой цели. Эта функция основана на реализации Mapster.EFCore.

public async Task Update(PersonInputDto input)
{
  var person = await _personRepository.Entities.Include(u => u.PersonDetail).Include(u => u.Childrens).Include(u => u.Posts).SingleAsync(u => u.Id == input.Id.Value);
//直接Adapt,会清空Children列表然后插入,EF将会捕捉到所有Children被更新
// input.Adapt(person);
//AdaptToTrack会检测Children的主键(Id)的对应关系,来进行Map,EF只会捕捉到被修改过的更新
   input.AdaptToTrack(person);
   await _personRepository.UpdateAsync(person);

}

3. Общие интерфейсы CRUD

Просто наследуйте соответствующий интерфейс класса от CrudService, чтобы легко реализовать операции добавления, удаления, изменения и запроса.

    public class StudentService : CrudService<StudentDto, Student>, IDynamicApiController
    {

    }

Все методы CrudService являются виртуальными, вы можете свободно переопределять их. Также можно настроить следующие параметры:

  • IsFakeDelete: указывает, является ли удаление мягким удалением. По умолчанию значение определяется на основе того, имеет ли сущность атрибут [FakeDelete].
  • IsCalculateCount: определяет, подсчитывается ли количество результатов при вызове метода List. Поскольку эта операция использует Count для вычисления, она может увеличить время отклика. Значение по умолчанию — True. Помимо методов CreateAsync, UpdateAsync, Find, List и DeleteAsync, поддерживаются следующие методы:
  • CreateFilterQuery: используется для генерации выражения Where. По умолчанию используется System.Linq.Dynamic.Core, но вы можете использовать свою собственную реализацию.
  • CreateEntityQuery: выполняет дополнительные операции над запросом сущности при использовании методов Update и Get, таких как добавление Include или Join. Обратите внимание, что параметр Query уже содержит выражение Where, поэтому сложные Include могут быть безопасно загружены с использованием Load.
  • CreateListQuery: выполняет дополнительные операции над списком запросов при использовании метода List, такие как добавление Include или Join. Обратите внимание, что параметр Query уже содержит выражение Where, поэтому сложные Include могут быть безопасно загружены с использованием Load.

Участие в проекте

  1. Fork этого репозитория.
  2. Создайте ветку Feat_xxx.
  3. Отправьте код.
  4. Создайте запрос на вытягивание.

Особенности

  1. Используйте файлы Readme_XXX.md для поддержки разных языков, например Readme_en.md, Readme_zh.md.
  2. Официальный блог Gitee [blog.gitee.com].
  3. Вы можете посетить [https://gitee.com/explore], чтобы узнать о выдающихся проектах с открытым исходным кодом на Gitee.
  4. GVP (Gitee Value Project) — это коллекция выдающихся проектов с открытым исходным кодом, отобранных Gitee.
  5. Gitee предоставляет руководство по использованию [https://gitee.com/help].
  6. На Gitee есть раздел «Лица Gitee», где демонстрируются члены сообщества Gitee [https://gitee.com/gitee-stars/].

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Пакет практичных расширений для базовых функций Fur. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/vincywindy-fur-extension-pack.git
git@api.gitlife.ru:oschina-mirror/vincywindy-fur-extension-pack.git
oschina-mirror
vincywindy-fur-extension-pack
vincywindy-fur-extension-pack
master