Table of Contents

Class KEFCoreOptionsExtension

Namespace
MASES.EntityFrameworkCore.KNet.Infrastructure.Internal
Assembly
MASES.EntityFrameworkCore.KNet.dll

This is an internal API that supports the Entity Framework Core infrastructure and not subject to the same compatibility standards as public APIs. It may be changed or removed without notice in any release. You should only use it directly in your code with extreme caution and knowing that doing so can result in application failures when updating to a new Entity Framework Core release.

public class KEFCoreOptionsExtension : IDbContextOptionsExtension, IKEFCoreSingletonOptions, ISingletonOptions
Inheritance
KEFCoreOptionsExtension
Implements
Inherited Members
Extension Methods

Constructors

KEFCoreOptionsExtension()

Initializer

public KEFCoreOptionsExtension()

KEFCoreOptionsExtension(KEFCoreOptionsExtension)

Initializer

protected KEFCoreOptionsExtension(KEFCoreOptionsExtension copyFrom)

Parameters

copyFrom KEFCoreOptionsExtension

Properties

ApplicationId

The application id associated to the application in use, shall be set if UseCompactedReplicator is false

public virtual string? ApplicationId { get; set; }

Property Value

string

Remarks

Choose the value carefully: upon restart its value is used to identify information on Apache Kafka™ cluster of previous running application. If UseGlobalTable is false the partitions associated to each topic are shared across all instances with the same ApplicationId so be carefull to avoid other application consumes the data from Apache Kafka™ cluster and local stores does not contains the expected information.

BootstrapServers

The bootstrap servers of the Apache Kafka™ cluster

public virtual string? BootstrapServers { get; set; }

Property Value

string

ClusterId

Internal property

public virtual string ClusterId { get; }

Property Value

string

ConsumerConfig

public virtual ConsumerConfigBuilder? ConsumerConfig { get; set; }

Property Value

ConsumerConfigBuilder

DefaultConsumerInstances

Default consumr instances used in conjunction with UseCompactedReplicator

public virtual int? DefaultConsumerInstances { get; set; }

Property Value

int?

DefaultNumPartitions

Default number of partitions associated to each topic

public virtual int DefaultNumPartitions { get; set; }

Property Value

int

DefaultReplicationFactor

Default replication factor associated to each topic

public virtual short DefaultReplicationFactor { get; set; }

Property Value

short

DefaultSynchronizationTimeout

The default timeout, expressed in milliseconds, KEFCore will wait for backend to be in-sync with Apache Kafka™ cluster. Setting DefaultSynchronizationTimeout to 0 the synchronization will be disabled

public virtual long DefaultSynchronizationTimeout { get; set; }

Property Value

long

Remarks

The KEFCore provider try to synchronize with Apache Kafka™ cluster waiting at least DefaultSynchronizationTimeout when EnsureCreated() of Database is invoked.

Info

Information/metadata about the extension.

public virtual DbContextOptionsExtensionInfo Info { get; }

Property Value

DbContextOptionsExtensionInfo

KeySerDesSelectorType

The optional Type to use for key serialization selection

Default value is DefaultKEFCoreSerDes.Key<T>, any custom Type shall implement ISerDesSelector<T>

public virtual Type KeySerDesSelectorType { get; set; }

Property Value

Type

ManageEvents

Setting this property to true the engine will emit events on ChangeTracker, default is true

public virtual bool ManageEvents { get; set; }

Property Value

bool

ProducerConfig

The optional ProducerConfigBuilder

public virtual ProducerConfigBuilder? ProducerConfig { get; set; }

Property Value

ProducerConfigBuilder

ReadOnlyMode

Setting this property to true if the engine shall reject any write operation, its value will be used to verify if topics has the proper rights WRITE and READ

public virtual bool ReadOnlyMode { get; set; }

Property Value

bool

StreamsConfig

The optional StreamsConfig used when UseCompactedReplicator is false

public virtual StreamsConfigBuilder? StreamsConfig { get; set; }

Property Value

StreamsConfigBuilder

TopicConfig

The optional TopicConfigBuilder used when topics shall be created

public virtual TopicConfigBuilder? TopicConfig { get; set; }

Property Value

TopicConfigBuilder

TopicPrefix

Database name means whe prefix of the topics associated to the instance of KEFCoreDbContext

public virtual string? TopicPrefix { get; set; }

Property Value

string

UseByteBufferDataTransfer

Setting this property to true the engine prefers to use ByteBuffer data exchange in serializer instances

public virtual bool UseByteBufferDataTransfer { get; set; }

Property Value

bool

UseCompactedReplicator

Use KNetCompactedReplicator<K, V> instead of Apache Kafka™ Streams

public virtual bool UseCompactedReplicator { get; set; }

Property Value

bool

UseDeletePolicyForTopic

Use delete cleanup policy when a topic is created

public virtual bool UseDeletePolicyForTopic { get; set; }

Property Value

bool

UseEnumeratorWithPrefetch

Setting this property to true the engine prefers to use enumerator instances able to do a prefetch on data speeding up execution

public virtual bool UseEnumeratorWithPrefetch { get; set; }

Property Value

bool

Remarks

Used only if UseCompactedReplicator is false and UseKNetStreams is true, not available in EFCore 6.

UseGlobalTable

Setting this property to true the engine based on Streams (i.e. UseCompactedReplicator is false) will use GlobalKTable<K, V> (GlobalKTable<K, V, TJVMK, TJVMV> if UseKNetStreams is true) instead of KTable<K, V> (KTable<K, V, TJVMK, TJVMV> if UseKNetStreams is true) to manage local storage of information.

public virtual bool UseGlobalTable { get; set; }

Property Value

bool

Remarks

Setting UseGlobalTable to true is in contrast with ManageEvents that needs UseCompactedReplicator=true or a backend based on KTable<K, V> (KTable<K, V, TJVMK, TJVMV> if UseKNetStreams is true) The behavior can be changed if the application based on KEFCore does not needs events (ManageEvents=true) and/or there is a limitation using KTable<K, V> (KTable<K, V, TJVMK, TJVMV> if UseKNetStreams is true) coming from other configuration parameters like ApplicationId: using the same ApplicationId across the same cluster, the partitions of KTable<K, V> (KTable<K, V, TJVMK, TJVMV> if UseKNetStreams is true) are managed from multiple instances.

UseKNetStreams

Use KNet version of Apache Kafka™ Streams instead of standard Apache Kafka™ Streams

public virtual bool UseKNetStreams { get; set; }

Property Value

bool

UsePersistentStorage

Use persistent storage when Apache Kafka™ Streams is in use

public virtual bool UsePersistentStorage { get; set; }

Property Value

bool

UseStoreKeyRange

Setting this property to true to enable key range look-up in engine

public virtual bool UseStoreKeyRange { get; }

Property Value

bool

UseStorePrefixScan

Setting this property to true to enable prefix scan in engine

public virtual bool UseStorePrefixScan { get; set; }

Property Value

bool

UseStoreReverse

Setting this property to true to enable reverse look-up in engine

public virtual bool UseStoreReverse { get; }

Property Value

bool

UseStoreReverseKeyRange

Setting this property to true to enable reverse key range look-up in engine

public virtual bool UseStoreReverseKeyRange { get; }

Property Value

bool

UseStoreSingleKeyLookup

Setting this property to true to enable single key look-up in engine

public virtual bool UseStoreSingleKeyLookup { get; }

Property Value

bool

ValueContainerType

The optional Type to use as value container

Default value is DefaultValueContainer<TKey>, any custom Type shall implement IValueContainer<T>

public virtual Type ValueContainerType { get; set; }

Property Value

Type

ValueSerDesSelectorType

The optional Type to use for value serialization selection

Default value is DefaultKEFCoreSerDes.ValueContainer<T>, any custom Type shall implement ISerDesSelector<T>

public virtual Type ValueSerDesSelectorType { get; set; }

Property Value

Type

Methods

ApplyServices(IServiceCollection)

Adds the services required to make the selected options work. This is used when there is no external IServiceProvider and EF is maintaining its own service provider internally. This allows database providers (and other extensions) to register their required services when EF is creating an service provider.

public virtual void ApplyServices(IServiceCollection services)

Parameters

services IServiceCollection

The collection to add services to.

Clone()

protected virtual KEFCoreOptionsExtension Clone()

Returns

KEFCoreOptionsExtension

Initialize(IDbContextOptions)

Initializes the singleton options from the given IDbContextOptions.

public void Initialize(IDbContextOptions options)

Parameters

options IDbContextOptions

ProducerOptions()

Build Properties for producers

public virtual Properties ProducerOptions()

Returns

Properties

ProducerOptionsBuilder()

Build ProducerConfigBuilder for producers

public virtual ProducerConfigBuilder ProducerOptionsBuilder()

Returns

ProducerConfigBuilder

StreamsOptions(IEntityType)

Build StreamsConfigBuilder from options

public virtual StreamsConfigBuilder StreamsOptions(IEntityType entityType)

Parameters

entityType IEntityType

Returns

StreamsConfigBuilder

StreamsOptions(string)

Build Properties for applicationId

public virtual Properties StreamsOptions(string applicationId)

Parameters

applicationId string

Returns

Properties

Validate(IDbContextOptions)

Gives the extension a chance to validate that all options in the extension are valid. Most extensions do not have invalid combinations and so this will be a no-op. If options are invalid, then an exception should be thrown.

public virtual void Validate(IDbContextOptions options)

Parameters

options IDbContextOptions

The options being validated.

WithApplicationId(string?)

The application id associated to the application in use, shall be set if UseCompactedReplicator is false

public virtual KEFCoreOptionsExtension WithApplicationId(string? applicationId)

Parameters

applicationId string

Returns

KEFCoreOptionsExtension

Remarks

Choose the value carefully: upon restart its value is used to identify information on Apache Kafka™ cluster of previous running application. If UseGlobalTable is false the partitions associated to each topic are shared across all instances with the same ApplicationId so be carefull to avoid other application consumes the data from Apache Kafka™ cluster and local stores does not contains the expected information.

WithBootstrapServers(string)

The bootstrap servers of the Apache Kafka™ cluster

public virtual KEFCoreOptionsExtension WithBootstrapServers(string bootstrapServers)

Parameters

bootstrapServers string

Returns

KEFCoreOptionsExtension

WithCompactedReplicator(bool)

Use KNetCompactedReplicator<K, V> instead of Apache Kafka™ Streams

[Obsolete("Option will be removed soon")]
public virtual KEFCoreOptionsExtension WithCompactedReplicator(bool useCompactedReplicator = true)

Parameters

useCompactedReplicator bool

Returns

KEFCoreOptionsExtension

WithConsumerConfig(ConsumerConfigBuilder)

public virtual KEFCoreOptionsExtension WithConsumerConfig(ConsumerConfigBuilder consumerConfigBuilder)

Parameters

consumerConfigBuilder ConsumerConfigBuilder

Returns

KEFCoreOptionsExtension

WithDefaultConsumerInstances(int?)

Default consumr instances used in conjunction with UseCompactedReplicator

public virtual KEFCoreOptionsExtension WithDefaultConsumerInstances(int? defaultConsumerInstances = null)

Parameters

defaultConsumerInstances int?

Returns

KEFCoreOptionsExtension

WithDefaultNumPartitions(int)

Default number of partitions associated to each topic

public virtual KEFCoreOptionsExtension WithDefaultNumPartitions(int defaultNumPartitions = 1)

Parameters

defaultNumPartitions int

Returns

KEFCoreOptionsExtension

WithDefaultReplicationFactor(short)

Default replication factor associated to each topic

public virtual KEFCoreOptionsExtension WithDefaultReplicationFactor(short defaultReplicationFactor = 3)

Parameters

defaultReplicationFactor short

Returns

KEFCoreOptionsExtension

WithDefaultSynchronizationTimeout(long)

The default timeout, expressed in milliseconds, KEFCore will wait for backend to be in-sync with Apache Kafka™ cluster. Setting DefaultSynchronizationTimeout to 0 the synchronization will be disabled

public virtual KEFCoreOptionsExtension WithDefaultSynchronizationTimeout(long defaultSynchronizationTimeout)

Parameters

defaultSynchronizationTimeout long

Returns

KEFCoreOptionsExtension

Remarks

The KEFCore provider try to synchronize with Apache Kafka™ cluster waiting at least DefaultSynchronizationTimeout when EnsureCreated() of Database is invoked.

WithKeySerDesSelectorType(Type)

The optional Type to use for key serialization selection

Default value is DefaultKEFCoreSerDes.Key<T>, any custom Type shall implement ISerDesSelector<T>

public virtual KEFCoreOptionsExtension WithKeySerDesSelectorType(Type serializationType)

Parameters

serializationType Type

Returns

KEFCoreOptionsExtension

WithManageEvents(bool)

Setting this property to true the engine will emit events on ChangeTracker, default is true

public virtual KEFCoreOptionsExtension WithManageEvents(bool manageEvents)

Parameters

manageEvents bool

Returns

KEFCoreOptionsExtension

WithProducerConfig(ProducerConfigBuilder)

The optional ProducerConfigBuilder

public virtual KEFCoreOptionsExtension WithProducerConfig(ProducerConfigBuilder producerConfigBuilder)

Parameters

producerConfigBuilder ProducerConfigBuilder

Returns

KEFCoreOptionsExtension

WithReadOnlyMode(bool)

Setting this property to true if the engine shall reject any write operation, its value will be used to verify if topics has the proper rights WRITE and READ

public virtual KEFCoreOptionsExtension WithReadOnlyMode(bool readOnlyMode)

Parameters

readOnlyMode bool

Returns

KEFCoreOptionsExtension

WithStoreKeyRange(bool)

Setting this property to true to enable key range look-up in engine

public virtual KEFCoreOptionsExtension WithStoreKeyRange(bool enabled = true)

Parameters

enabled bool

Returns

KEFCoreOptionsExtension

WithStorePrefixScan(bool)

Setting this property to true to enable prefix scan in engine

public virtual KEFCoreOptionsExtension WithStorePrefixScan(bool enabled = true)

Parameters

enabled bool

Returns

KEFCoreOptionsExtension

WithStoreReverse(bool)

Setting this property to true to enable reverse look-up in engine

public virtual KEFCoreOptionsExtension WithStoreReverse(bool enabled = true)

Parameters

enabled bool

Returns

KEFCoreOptionsExtension

WithStoreReverseKeyRange(bool)

Setting this property to true to enable reverse key range look-up in engine

public virtual KEFCoreOptionsExtension WithStoreReverseKeyRange(bool enabled = true)

Parameters

enabled bool

Returns

KEFCoreOptionsExtension

WithStoreSingleKeyLookup(bool)

Setting this property to true to enable single key look-up in engine

public virtual KEFCoreOptionsExtension WithStoreSingleKeyLookup(bool enabled = true)

Parameters

enabled bool

Returns

KEFCoreOptionsExtension

WithStreamsConfig(StreamsConfigBuilder)

The optional StreamsConfig used when UseCompactedReplicator is false

public virtual KEFCoreOptionsExtension WithStreamsConfig(StreamsConfigBuilder streamsConfigBuilder)

Parameters

streamsConfigBuilder StreamsConfigBuilder

Returns

KEFCoreOptionsExtension

WithTopicConfig(TopicConfigBuilder)

The optional TopicConfigBuilder used when topics shall be created

public virtual KEFCoreOptionsExtension WithTopicConfig(TopicConfigBuilder topicConfigBuilder)

Parameters

topicConfigBuilder TopicConfigBuilder

Returns

KEFCoreOptionsExtension

WithTopicPrefix(string?)

Database name means whe prefix of the topics associated to the instance of KEFCoreDbContext

public virtual KEFCoreOptionsExtension WithTopicPrefix(string? topicPrefix)

Parameters

topicPrefix string

Returns

KEFCoreOptionsExtension

WithUseByteBufferDataTransfer(bool)

Setting this property to true the engine prefers to use ByteBuffer data exchange in serializer instances

public virtual KEFCoreOptionsExtension WithUseByteBufferDataTransfer(bool useByteBufferDataTransfer = true)

Parameters

useByteBufferDataTransfer bool

Returns

KEFCoreOptionsExtension

WithUseDeletePolicyForTopic(bool)

Use delete cleanup policy when a topic is created

public virtual KEFCoreOptionsExtension WithUseDeletePolicyForTopic(bool useDeletePolicyForTopic = true)

Parameters

useDeletePolicyForTopic bool

Returns

KEFCoreOptionsExtension

WithUseEnumeratorWithPrefetch(bool)

Setting this property to true the engine prefers to use enumerator instances able to do a prefetch on data speeding up execution

public virtual KEFCoreOptionsExtension WithUseEnumeratorWithPrefetch(bool useEnumeratorWithPrefetch = true)

Parameters

useEnumeratorWithPrefetch bool

Returns

KEFCoreOptionsExtension

Remarks

Used only if UseCompactedReplicator is false and UseKNetStreams is true, not available in EFCore 6.

WithUseGlobalTable(bool)

Setting this property to true the engine based on Streams (i.e. UseCompactedReplicator is false) will use GlobalKTable<K, V> (GlobalKTable<K, V, TJVMK, TJVMV> if UseKNetStreams is true) instead of KTable<K, V> (KTable<K, V, TJVMK, TJVMV> if UseKNetStreams is true) to manage local storage of information.

public virtual KEFCoreOptionsExtension WithUseGlobalTable(bool useGlobalTable = true)

Parameters

useGlobalTable bool

Returns

KEFCoreOptionsExtension

Remarks

Setting UseGlobalTable to true is in contrast with ManageEvents that needs UseCompactedReplicator=true or a backend based on KTable<K, V> (KTable<K, V, TJVMK, TJVMV> if UseKNetStreams is true) The behavior can be changed if the application based on KEFCore does not needs events (ManageEvents=true) and/or there is a limitation using KTable<K, V> (KTable<K, V, TJVMK, TJVMV> if UseKNetStreams is true) coming from other configuration parameters like ApplicationId: using the same ApplicationId across the same cluster, the partitions of KTable<K, V> (KTable<K, V, TJVMK, TJVMV> if UseKNetStreams is true) are managed from multiple instances.

WithUseKNetStreams(bool)

Use KNet version of Apache Kafka™ Streams instead of standard Apache Kafka™ Streams

public virtual KEFCoreOptionsExtension WithUseKNetStreams(bool useKNetStreams = true)

Parameters

useKNetStreams bool

Returns

KEFCoreOptionsExtension

WithUsePersistentStorage(bool)

Use persistent storage when Apache Kafka™ Streams is in use

public virtual KEFCoreOptionsExtension WithUsePersistentStorage(bool usePersistentStorage = true)

Parameters

usePersistentStorage bool

Returns

KEFCoreOptionsExtension

WithValueContainerType(Type)

The optional Type to use as value container

Default value is DefaultValueContainer<TKey>, any custom Type shall implement IValueContainer<T>

public virtual KEFCoreOptionsExtension WithValueContainerType(Type serializationType)

Parameters

serializationType Type

Returns

KEFCoreOptionsExtension

WithValueSerDesSelectorType(Type)

The optional Type to use for value serialization selection

Default value is DefaultKEFCoreSerDes.ValueContainer<T>, any custom Type shall implement ISerDesSelector<T>

public virtual KEFCoreOptionsExtension WithValueSerDesSelectorType(Type serializationType)

Parameters

serializationType Type

Returns

KEFCoreOptionsExtension