Base solution for your next web application
Open Closed

Problem caching entity with long id #1927


User avatar
0
sayram created

I've an entity name Listing like below.

public class Listing : FullAuditedEntity<long, User>, IPassivable
    {}

I'm studing EntityCaching here. <a class="postlink" href="http://www.aspnetboilerplate.com/Pages/Documents/Caching#entity-caching">http://www.aspnetboilerplate.com/Pages/ ... ty-caching</a>

I created these codes by respecting documentation.

public interface IListingCache : IEntityCache<ListingDto>
    {

    }

    public class ListingCache : EntityCache<Listing, ListingDto>, IListingCache, ITransientDependency
    {
        public ListingCache(ICacheManager cacheManager, IRepository<Listing, long> repository)
            : base(cacheManager, repository)
        {

        }
    }

At coding time there are errors like below

Listings.Listing' cannot be used as type parameter 'TEntity' in the generic type or method 'EntityCache<TEntity, TCacheItem>'. There is no implicit reference conversion from Listings.Listing' to 'Abp.Domain.Entities.IEntity<int>'.

Listings.Listing, long>' to 'Abp.Domain.Repositories.IRepository<Listings.Listing, int>'

These errors dis appears if i change Entity id type to int from long. So, question is basic. Cant i use EntityCache with long type? Or should i use ICacheManager?

By the way im not familiar with these caching things. What is different between ICacheManager and EntityCache? Ty.


1 Answer(s)
  • User Avatar
    0
    ismcagdas created
    Support Team

    Hi,

    You can use entities with long primary keys just define your interface and class like this,

    public interface IListingCache : IEntityCache<ListingDto, long>
    {
    
    }
    
    public class ListingCache : EntityCache<Listing, ListingDto,long>, IListingCache, ITransientDependency
    {
        public ListingCache(ICacheManager cacheManager, IRepository<Listing, long> repository)
            : base(cacheManager, repository)
        {
    
        }
    }
    

    There is noting different actuallay, it's a special version of caching. From documentation

    While ASP.NET Boilerplate's cache system is general purpose, there is an EntityCache base class that can help you if you want to cache entities.