public BeerSample(IBucket bucket) : base(bucket) { //Two ways of applying a filter are included in this example. //This is by implementing IDocumentFilter and then adding explicitly. //adding it to the DocumentFilterManager DocumentFilterManager.SetFilter(new BreweryFilter()); }
private static void InitializeCouchbase() { ILoggerFactory loggerFactory = new LoggerFactory(); loggerFactory.AddNLog(new NLogProviderOptions { CaptureMessageTemplates = true, CaptureMessageProperties = true }); NLog.LogManager.LoadConfiguration("nlog.config"); _cluster = new Cluster ( new ClientConfiguration { LoggerFactory = loggerFactory, Servers = new List <Uri> { new Uri("http://localhost:8091/") }, Serializer = () => new CustomIdEnabledSerializer() } ); var authenticator = new PasswordAuthenticator("Administrator", "trustno1"); _cluster.Authenticate(authenticator); _bucket = _cluster.OpenBucket("test"); _bucketContext = new BucketContext(_bucket); DocumentFilterManager.SetFilter(new TestDocumentFilter()); TypeBasedSerializationConverterRegistry.Global.Add(typeof(JsonIdentityConverter), typeof(TestDocumentIdSerializationConverter)); }
/// <summary> /// Queries the current <see cref="IBucket" /> for entities of type T. This is the target of /// a LINQ query and requires that the associated JSON document have a type property that is the same as T. /// </summary> /// <typeparam name="T">An entity or POCO representing the object graph of a JSON document.</typeparam> /// <param name="options">Options to control the returned query.</param> /// <returns><see cref="IQueryable{T}" /> which can be used to query the bucket.</returns> public IQueryable <T> Query <T>(BucketQueryOptions options) { IQueryable <T> query = new BucketQueryable <T>(Bucket, Configuration, this); if ((options & BucketQueryOptions.SuppressFilters) == BucketQueryOptions.None) { query = DocumentFilterManager.ApplyFilters(query); } return(query); }
public IQueryable <T> Query <T>(BucketQueryOptions options) { var query = _bucket.Select(p => p.Value?.Content).OfType <T>().AsQueryable(); if ((options & BucketQueryOptions.SuppressFilters) == BucketQueryOptions.None) { query = DocumentFilterManager.ApplyFilters(query); } return(query); }
public void Map2PocoTests_Simple_Projections_TypeFilterRuntime() { DocumentFilterManager.SetFilter(new BreweryFilter()); var bucket = ClusterHelper.GetBucket("beer-sample"); var context = new BucketContext(bucket); var breweries = (from b in context.Query <Brewery>() select new { type = b.Type }) .AsEnumerable(); Assert.True(breweries.All(p => p.type == "brewery")); }
/// <summary> /// Creates a new BucketContext for a given Couchbase bucket. /// </summary> /// <param name="bucket">Bucket referenced by the new BucketContext.</param> public BucketContext(IBucket bucket) { Bucket = bucket ?? throw new ArgumentNullException(nameof(bucket)); try { _documentFilterManager = bucket.Cluster.ClusterServices.GetRequiredService <DocumentFilterManager>(); } catch (InvalidOperationException) { throw new CouchbaseException( $"{nameof(DocumentFilterManager)} has not been registered with the Couchbase Cluster. Be sure {nameof(LinqClusterOptionsExtensions.AddLinq)} is called on ${nameof(ClusterOptions)} during bootstrap."); } }
public void Map2PocoTests_Simple_Projections_TypeFilterRuntime() { DocumentFilterManager.SetFilter(new BreweryFilter()); using (var cluster = new Cluster(TestConfigurations.DefaultConfig())) { using (var bucket = cluster.OpenBucket("beer-sample")) { var breweries = (from b in bucket.Queryable <Brewery>() select new { type = b.Type }) .AsEnumerable(); Assert.True(breweries.All(p => p.type == "brewery")); } } }
/// <summary> /// Creates a new BucketContext for a given Couchbase bucket. /// </summary> /// <param name="bucket">Bucket referenced by the new BucketContext.</param> public BucketContext(IBucket bucket) { Bucket = bucket ?? throw new ArgumentNullException(nameof(bucket)); try { _documentFilterManager = bucket.Cluster.ClusterServices.GetRequiredService <DocumentFilterManager>(); } catch (InvalidOperationException) { throw new CouchbaseException( $"{nameof(DocumentFilterManager)} has not been registered with the Couchbase Cluster. Be sure {nameof(LinqClusterOptionsExtensions.AddLinq)} is called on ${nameof(ClusterOptions)} during bootstrap."); } var myType = GetType(); if (myType != typeof(BucketContext)) { // If this isn't a base BucketContext, fill any properties added by the inherited class ContextMetadataCache.Instance.Get(myType).Fill(this); } }
internal static IQueryable <T> Queryable <T>(this IBucket bucket) { //TODO refactor so ClientConfiguration is injectable return(DocumentFilterManager.ApplyFilters(new BucketQueryable <T>(bucket, new ClientConfiguration()))); }
/// <summary> /// Queries the current <see cref="IBucket" /> for entities of type <see cref="T" />. This is the target of /// the Linq query requires that the associated JSON document have a type property that is the same as <see cref="T" />. /// </summary> /// <typeparam name="T">An entity or POCO representing the object graph of a JSON document.</typeparam> /// <returns></returns> public IQueryable <T> Query <T>() { return(DocumentFilterManager.ApplyFilters(new BucketQueryable <T>(_bucket, Configuration, EnableChangeTracking))); }
/// <summary> /// Queries the current <see cref="IBucket" /> for entities of type T. This is the target of /// a LINQ query and requires that the associated JSON document have a type property that is the same as T. /// </summary> /// <typeparam name="T">An entity or POCO representing the object graph of a JSON document.</typeparam> /// <returns><see cref="IQueryable{T}" /> which can be used to query the bucket.</returns> public IQueryable <T> Query <T>() { return(DocumentFilterManager.ApplyFilters(new BucketQueryable <T>(_bucket, Configuration, this))); }