0

我有一个自定义 dbcontext,其名称是启用 Tracker 的 DbContext ( https://github.com/bilal-fazlani/tracker-enabled-dbcontext )。我想将它用于审计日志

以及如何实现 EFRepository?

我实现了启用跟踪器的上下文,但我无法解决如何覆盖锐利的回购提交方法。

public class HayEntities : TrackerContext
   {
    static HayEntities()
    {
      Database.SetInitializer<HayEntities>(null);
    }
    public HayEntities() : base(HayEntities)
    {
      this.Configuration.ProxyCreationEnabled = false;
      this.Configuration.LazyLoadingEnabled = true;
      this.Configuration.ValidateOnSaveEnabled = false;
    }
    public DbSet<Dummy> Dummys{ get; set; }  
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
      modelBuilder.Configurations.Add(new DummyConfiguration());

    } }
  }
 public class DummyRepository : ConfigurationBasedRepository<DE.Dummy, long>, IDummyRepository
    {
        private readonly IRepository<DE.Dummy, long> _servisHasarRepository;
        public DummyRepository (HayEntities hayEntities,    ICachingStrategy<DE.Dummy, long> cachingStrategy = null)
        {this.CachingEnabled = false;
            _dummyRepository = new EfRepository<DE.Dummy, long>(hayEntities, cachingStrategy);
        }
public void UpdateOrCreate() {
 //In this area how can override save/commit method
}
  } 
4

1 回答 1

0

您需要告诉 SharpRepository 使用 IoC 提供程序来注入 DbContext。这将负责为您的 EfRepository 获取正确的 DbContext。

如果您想根据配置控制事物并拥有自定义存储库,以便您可以实现自己的方法,例如 UpdateOrCreate(),那么您将像示例中那样从 ConfigurationBasedRepository 继承。

这里有更多关于使用 SharpRepository 设置 IoC 的详细信息:http://fairwaytech.com/2013/02/sharprepository-configuration/ 查看“实体框架和共享 DbContext”部分)

首先在 NuGet 上查找 SharpRepository.Ioc.* 以找到您正在使用的特定 IoC。如果你使用的是 StructureMap,那么你会做这样的事情。

在您的 StructureMap 配置中:

// Hybrid (once per thread or ASP.NET request if you’re in a web application)
For<DbContext>()
    .HybridHttpOrThreadLocalScoped()
    .Use<HayEntities>()
    .Ctor<string>("connectionString").Is(entityConnectionString);

然后,您需要通过在启动代码中调用它来告诉 SharpRepository 使用 StructureMap:

RepositoryDependencyResolver.SetDependencyResolver(new StructureMapDependencyResolver(ObjectFactory.Container));

完成这些操作后,如果您使用 EfRepository,它就会知道向 StructureMap 请求 DbContext。

现在,在上面使用 ConfigurationBasedRepository 的示例中,我建议在配置文件中而不是在代码中设置缓存,因为您正在使用配置来加载存储库。由于 IoC 正在处理 DbContext,因此您无需对此做任何事情,您可以专注于您想要编写的自定义方法。

public class DummyRepository : ConfigurationBasedRepository<DE.Dummy, long>, IDummyRepository
{
    public void UpdateOrCreate()
    {
        // You have access to the underlying IRepository<> which is going to be an EfRepository in your case assuming you did that in the config file
        // here you can call Repository.Add(), or Reposiory.Find(), etc.
    }
} 
于 2016-03-15T21:32:34.770 回答