示例#1
0
 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());
 }
示例#2
0
        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);
        }
示例#5
0
        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"));
        }
示例#6
0
        /// <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.");
            }
        }
示例#7
0
        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"));
                }
            }
        }
示例#8
0
        /// <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)));
 }
示例#11
0
 /// <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)));
 }