2017-12-05 16 views
0

私は、私のアプリケーション全体を通して必要とするいくつかのマスターデータをDBに持っています。アプリケーションでこのデータを定義する最も良い方法は何ですか?アプリケーションを開始するたびに、アプリケーションでこのマスタデータを初期化するように、アプリケーションでどこを定義する必要がありますか。そして、DBからデータをフェッチするメソッドはどこで定義する必要がありますか?ASP.NET Boilerplateでキャッシュを使用するには?

using System.Linq; 
using System.Threading.Tasks; 
using Abp.Application.Services.Dto; 
using Abp.Authorization; 
using Abp.Runtime.Caching; 
using Test.Authorization; 
using Test.Caching.Dto; 

namespace Test.Caching 
{ 
    [AbpAuthorize(AppPermissions.Pages_Administration_Host_Maintenance)] 
    public class CachingAppService : TestAppServiceBase, ICachingAppService 
    { 
     private readonly ICacheManager _cacheManager; 

     public CachingAppService(ICacheManager cacheManager) 
     { 
      _cacheManager = cacheManager; 
     } 

     public ListResultDto<CacheDto> GetAllCaches() 
     { 
      var caches = _cacheManager.GetAllCaches() 
             .Select(cache => new CacheDto 
             { 
              Name = cache.Name 
             }) 
             .ToList(); 

      return new ListResultDto<CacheDto>(caches); 
     } 

     public async Task ClearCache(EntityDto<string> input) 
     { 
      var cache = _cacheManager.GetCache(input.Id); 
      await cache.ClearAsync(); 
     } 

     public async Task ClearAllCaches() 
     { 
      var caches = _cacheManager.GetAllCaches(); 
      foreach (var cache in caches) 
      { 
       await cache.ClearAsync(); 
      } 
     } 
    } 
} 

Startup.csコード:

public IServiceProvider ConfigureServices(IServiceCollection services) 
{ 
    services.AddMemoryCache(); 
} 
+0

ヒント:シンタックスハイライトのために 'C#'タグを追加! – aaron

+0

@aaronあなたはaspnetboilerplateコミュニティからのサポートを提供してください。 –

+0

マスターデータとは何ですか? – aaron

答えて

1

この回答はEntity Cachingのドキュメントに基づいています。

アプリケーションでこのデータを定義する最も良い方法は何ですか?毎回アプリケーションは、私は自分のアプリケーションでこのマスタデータを初期化します開始するように、私は、アプリケーションで定義する必要があります

[AutoMapFrom(typeof(Person))] 
public class PersonCacheItem 
{ 
    public string Name { get; set; } 
} 

:キャッシュアイテムとして

?データをキャッシュに追加するには?キャッシュにデータを追加する必要はどこですか?

マスターデータを初期化せず(IEntityCacheにデータを追加しない)。それは怠け者です。

デフォルトのキャッシュ有効期限は60分です。それは滑っている。したがって、キャッシュ内の項目を60分間使用しないと、自動的にキャッシュから削除されます。すべてのキャッシュまたは特定のキャッシュ用に構成できます。

// Configuration for a specific cache 
Configuration.Caching.Configure("MyCache", cache => 
{ 
    cache.DefaultSlidingExpireTime = TimeSpan.FromHours(8); 
}); 

このコードは、あなたのモジュールのPREINITIALIZE方法を配置する必要があります。

ここで、DBからデータをフェッチする方法を定義する必要がありますか?

このメソッドは定義しません。ちょうどIRepositoryを注入してください。上記の場合はcacheNameを指定してください。私はキャッシュからデータを取得する方法

public class PersonCache : EntityCache<Person, PersonCacheItem>, IPersonCache, ITransientDependency 
{ 
    public PersonCache(ICacheManager cacheManager, IRepository<Person> repository) 
     : base(cacheManager, repository, "MyCache") // "MyCache" is optional 
    { 
    } 
} 

public interface IPersonCache : IEntityCache<PersonCacheItem> 
{ 
} 

人のキャッシュ使用例クラス:

public class MyPersonService : ITransientDependency 
{ 
    private readonly IPersonCache _personCache; 

    public MyPersonService(IPersonCache personCache) 
    { 
     _personCache = personCache; 
    } 

    public string GetPersonNameById(int id) 
    { 
     return _personCache[id].Name; // alternative: _personCache.Get(id).Name; 
    } 
} 
関連する問題