Как реализовать EFContextProvider, используя BreezeJS для ядра .net? - PullRequest
0 голосов
/ 07 мая 2018

Мне удалось внедрить Breeze в угловое приложение, используя AspNetCore на основе образца Breeze Temphire и примеров breeze.server.net/AspNetCore/ github. Я застрял, пытаясь выяснить, как реализовать EFContextProvider в единице работы. Что касается кода Tempire Temphire на Github , может кто-нибудь показать мне, как создать UnitOfWork с использованием AspNetCore?

EFContextProvider не существует в следующих breeze libs:

  • Breeze.Core
  • Бриз. Жизнеспособность
  • Breeze.pErsistence.EFCore
  • Breeze.AspNetCore.NetCore

Для ясности я хотел бы создать следующее с помощью библиотек AspNetCore / Breeze:

public class UnitOfWork
{
    private readonly EFContextProvider<TempHireDbContext> _contextProvider;

    public UnitOfWork()
    {
        _contextProvider = new EFContextProvider<TempHireDbContext>();

        StaffingResources = new Repository<StaffingResource>(_contextProvider.Context);
        Addresses = new Repository<Address>(_contextProvider.Context);
        AddressTypes = new Repository<AddressType>(_contextProvider.Context);
        PhoneNumbers = new Repository<PhoneNumber>(_contextProvider.Context);
        PhoneNumberTypes = new Repository<PhoneNumberType>(_contextProvider.Context);
        Rates = new Repository<Rate>(_contextProvider.Context);
        RateTypes = new Repository<RateType>(_contextProvider.Context);
        Skills = new Repository<Skill>(_contextProvider.Context);
        States = new Repository<State>(_contextProvider.Context);
        WorkExperienceItems = new Repository<WorkExperienceItem>(_contextProvider.Context);

        StaffingResourceListItems = new StaffingResourceListItemRepository(_contextProvider.Context);
    }

    public IRepository<StaffingResource> StaffingResources { get; private set; }
    public IRepository<Address> Addresses { get; private set; }
    public IRepository<AddressType> AddressTypes { get; private set; }
    public IRepository<PhoneNumber> PhoneNumbers { get; private set; }
    public IRepository<PhoneNumberType> PhoneNumberTypes { get; private set; }
    public IRepository<Rate> Rates { get; private set; }
    public IRepository<RateType> RateTypes { get; private set; }
    public IRepository<Skill> Skills { get; private set; }
    public IRepository<State> States { get; private set; }
    public IRepository<WorkExperienceItem> WorkExperienceItems { get; private set; }

    public IStaffingResourceListItemRepository StaffingResourceListItems { get; private set; }

    public SaveResult Commit(JObject changeSet)
    {
        return _contextProvider.SaveChanges(changeSet);
    }
}

}

Неужели все так просто?

 private readonly EFPersistenceManager<DictionaryPortalContext> _contextProvider;

Спасибо!

1 Ответ

0 голосов
/ 05 февраля 2019

Довольно близко.

Обычно мы создаем отдельный класс, чтобы у вас было куда добавить методы «BeforeSaveEntities» и «AfterSaveEntities».

public class MyPersistenceManager : EFPersistenceManager<DictionaryPortalContext> {
    public MyPersistenceManager (DictionaryPortalContext dbContext) : base(dbContext) { 
   // PM methods here.
 }

, а затем

  [Route("breeze/[controller]/[action]")]
  [BreezeQueryFilter]
  public class MyController : Controller {
    private MyPersistenceManager PersistenceManager;

    // called via DI 
    public MyController(NorthwindIBContext_CF context) {
      PersistenceManager = new MyPersistenceManager(context);
    }


    [HttpGet]
    public IActionResult Metadata() {
      return Ok(PersistenceManager.Metadata());
    }
    [HttpPost]
    public SaveResult SaveChanges([FromBody] JObject saveBundle) {
      return PersistenceManager.SaveChanges(saveBundle);
    }

    ...
  }

Надеюсь, это поможет.

...