【问题标题】:How do I implement an EFContextProvider using BreezeJS for .net core?如何使用 BreezeJS 为 .net 核心实现 EFContextProvider?
【发布时间】:2018-10-17 13:50:05
【问题描述】:

我已经能够使用基于 Breeze Temphire 示例和微风.server.net/AspNetCore/ github 示例的 AspNetCore 将 Breeze 实现到 Angular 应用程序中。我一直试图弄清楚如何在工作单元中实现 EFContextProvider。参考 Tempire 代码Temphire on Github,有人可以告诉我如何使用 AspNetCore 创建 UnitOfWork 吗?

EFContextProvider 不存在于以下微风库中:

  • Breeze.Core
  • Breeze.Persistence
  • 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;

谢谢!

【问题讨论】:

    标签: breeze breeze-sharp


    【解决方案1】:

    非常接近。

    我们通常会创建一个单独的类,以便您可以在某个地方添加“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);
        }
    
        ...
      }
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2017-06-18
      • 1970-01-01
      • 1970-01-01
      • 2020-08-05
      • 2018-04-16
      • 2021-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多