Exemple #1
0
        protected RelationalDataStore(
            [NotNull] StateManager stateManager,
            [NotNull] DbContextService <IModel> model,
            [NotNull] EntityKeyFactorySource entityKeyFactorySource,
            [NotNull] EntityMaterializerSource entityMaterializerSource,
            [NotNull] ClrCollectionAccessorSource collectionAccessorSource,
            [NotNull] ClrPropertySetterSource propertySetterSource,
            [NotNull] RelationalConnection connection,
            [NotNull] CommandBatchPreparer batchPreparer,
            [NotNull] BatchExecutor batchExecutor,
            [NotNull] DbContextService <IDbContextOptions> options,
            [NotNull] ILoggerFactory loggerFactory)
            : base(stateManager, model, entityKeyFactorySource, entityMaterializerSource,
                   collectionAccessorSource, propertySetterSource, loggerFactory)
        {
            Check.NotNull(connection, "connection");
            Check.NotNull(batchPreparer, "batchPreparer");
            Check.NotNull(batchExecutor, "batchExecutor");
            Check.NotNull(options, "options");

            _batchPreparer = batchPreparer;
            _batchExecutor = batchExecutor;
            _connection    = connection;
            _options       = options.Service;
        }
Exemple #2
0
        protected DataStore(
            [NotNull] StateManager stateManager,
            [NotNull] DbContextService <IModel> model,
            [NotNull] EntityKeyFactorySource entityKeyFactorySource,
            [NotNull] EntityMaterializerSource entityMaterializerSource,
            [NotNull] ClrCollectionAccessorSource collectionAccessorSource,
            [NotNull] ClrPropertySetterSource propertySetterSource,
            [NotNull] ILoggerFactory loggerFactory)
        {
            Check.NotNull(stateManager, "stateManager");
            Check.NotNull(model, "model");
            Check.NotNull(entityKeyFactorySource, "entityKeyFactorySource");
            Check.NotNull(entityMaterializerSource, "entityMaterializerSource");
            Check.NotNull(collectionAccessorSource, "collectionAccessorSource");
            Check.NotNull(propertySetterSource, "propertySetterSource");
            Check.NotNull(loggerFactory, "loggerFactory");

            _stateManager             = stateManager;
            _model                    = model;
            _entityKeyFactorySource   = entityKeyFactorySource;
            _entityMaterializerSource = entityMaterializerSource;
            _collectionAccessorSource = collectionAccessorSource;
            _propertySetterSource     = propertySetterSource;
            _logger                   = new LazyRef <ILogger>(loggerFactory.Create <DataStore>);
        }
Exemple #3
0
        private static void AccessorTest(
            string navigationName, Func <MyEntity, IEnumerable <MyOtherEntity> > reader, bool initializeCollections = true)
        {
            var accessor = new ClrCollectionAccessorSource(new CollectionTypeFactory()).GetAccessor(CreateNavigation(navigationName));

            var entity = new MyEntity();
            var value  = new MyOtherEntity();

            if (initializeCollections)
            {
                entity.InitializeCollections();
            }

            Assert.False(accessor.Contains(entity, value));
            Assert.DoesNotThrow(() => accessor.Remove(entity, value));

            accessor.Add(entity, value);

            Assert.True(accessor.Contains(entity, value));
            Assert.Equal(1, reader(entity).Count());

            accessor.Remove(entity, value);

            Assert.False(accessor.Contains(entity, value));
            Assert.Equal(0, reader(entity).Count());
        }
Exemple #4
0
        public InMemoryDataStore(
            [NotNull] StateManager stateManager,
            [NotNull] DbContextService <IModel> model,
            [NotNull] EntityKeyFactorySource entityKeyFactorySource,
            [NotNull] EntityMaterializerSource entityMaterializerSource,
            [NotNull] ClrCollectionAccessorSource collectionAccessorSource,
            [NotNull] ClrPropertySetterSource propertySetterSource,
            [NotNull] InMemoryDatabase persistentDatabase,
            [NotNull] DbContextService <IDbContextOptions> options,
            [NotNull] ILoggerFactory loggerFactory)
            : base(stateManager, model, entityKeyFactorySource, entityMaterializerSource,
                   collectionAccessorSource, propertySetterSource, loggerFactory)
        {
            Check.NotNull(persistentDatabase, "persistentDatabase");

            var storeConfig = options.Service.Extensions
                              .OfType <InMemoryOptionsExtension>()
                              .FirstOrDefault();

            _persist = (storeConfig != null ? (bool?)storeConfig.Persist : null) ?? true;

            _database = new ThreadSafeLazyRef <InMemoryDatabase>(
                () => _persist
                    ? persistentDatabase
                    : new InMemoryDatabase(loggerFactory));
        }
Exemple #5
0
        public void Initialization_for_navigation_without_setter_throws()
        {
            var accessor = new ClrCollectionAccessorSource(new CollectionTypeFactory()).GetAccessor(CreateNavigation("WithNoSetter"));

            Assert.Equal(
                Strings.FormatNavigationNoSetter("WithNoSetter", typeof(MyEntity).FullName),
                Assert.Throws <InvalidOperationException>(() => accessor.Add(new MyEntity(), new MyOtherEntity())).Message);
        }
Exemple #6
0
        public void Initialization_for_navigation_without_parameterless_constructor_throws()
        {
            var accessor = new ClrCollectionAccessorSource(new CollectionTypeFactory()).GetAccessor(CreateNavigation("AsMyUnavailableCollection"));

            Assert.Equal(
                Strings.FormatNavigationCannotCreateType("AsMyUnavailableCollection", typeof(MyEntity).FullName, typeof(MyUnavailableCollection).FullName),
                Assert.Throws <InvalidOperationException>(() => accessor.Add(new MyEntity(), new MyOtherEntity())).Message);
        }
Exemple #7
0
        public void Navigation_is_returned_if_it_implements_IClrCollectionAccessor()
        {
            var accessorMock   = new Mock <IClrCollectionAccessor>();
            var navigationMock = accessorMock.As <INavigation>();

            var source = new ClrCollectionAccessorSource(new CollectionTypeFactory());

            Assert.Same(accessorMock.Object, source.GetAccessor(navigationMock.Object));
        }
        public void Delegate_getter_is_cached_by_type_and_property_name()
        {
            var entityType = new EntityType(typeof(MyEntity));
            var navigation = entityType.AddNavigation(new Navigation(Mock.Of <ForeignKey>(), "AsICollection"));

            var source = new ClrCollectionAccessorSource();

            Assert.Same(source.GetAccessor(navigation), source.GetAccessor(navigation));
        }
Exemple #9
0
        public ForeignKeyValuePropagator(
            [NotNull] ClrPropertyGetterSource getterSource,
            [NotNull] ClrCollectionAccessorSource collectionAccessorSource)
        {
            Check.NotNull(getterSource, "getterSource");
            Check.NotNull(collectionAccessorSource, "collectionAccessorSource");

            _getterSource             = getterSource;
            _collectionAccessorSource = collectionAccessorSource;
        }
        public ForeignKeyValueGenerator(
            [NotNull] ClrPropertyGetterSource getterSource,
            [NotNull] ClrCollectionAccessorSource collectionAccessorSource)
        {
            Check.NotNull(getterSource, "getterSource");
            Check.NotNull(collectionAccessorSource, "collectionAccessorSource");

            _getterSource = getterSource;
            _collectionAccessorSource = collectionAccessorSource;
        }
Exemple #11
0
        public void Delegate_getter_is_cached_by_type_and_property_name()
        {
            var entityType = new Model().AddEntityType(typeof(MyEntity));
            var otherType  = new Model().AddEntityType(typeof(MyOtherEntity));
            var foreignKey = otherType.GetOrAddForeignKey(otherType.GetOrAddProperty("MyEntityId", typeof(int), shadowProperty: true), entityType.GetOrSetPrimaryKey(entityType.GetOrAddProperty("Id", typeof(int), shadowProperty: true)));

            var navigation = entityType.AddNavigation("AsICollection", foreignKey, pointsToPrincipal: false);

            var source = new ClrCollectionAccessorSource(new CollectionTypeFactory());

            Assert.Same(source.GetAccessor(navigation), source.GetAccessor(navigation));
        }
Exemple #12
0
        public NavigationFixer(
            [NotNull] StateManager stateManager,
            [NotNull] ClrCollectionAccessorSource collectionAccessorSource,
            [NotNull] ClrPropertySetterSource setterSource)
        {
            Check.NotNull(stateManager, "stateManager");
            Check.NotNull(collectionAccessorSource, "collectionAccessorSource");
            Check.NotNull(setterSource, "setterSource");

            _stateManager             = stateManager;
            _collectionAccessorSource = collectionAccessorSource;
            _setterSource             = setterSource;
        }
 public FakeRelationalDataStore(
     StateManager stateManager,
     DbContextService <IModel> model,
     EntityKeyFactorySource entityKeyFactorySource,
     EntityMaterializerSource entityMaterializerSource,
     ClrCollectionAccessorSource collectionAccessorSource,
     ClrPropertySetterSource propertySetterSource,
     RelationalConnection connection,
     CommandBatchPreparer batchPreparer,
     BatchExecutor batchExecutor,
     ILoggerFactory loggerFactory)
     : base(stateManager, model, entityKeyFactorySource, entityMaterializerSource,
            collectionAccessorSource, propertySetterSource, connection, batchPreparer, batchExecutor, loggerFactory)
 {
 }
 public SqlStoreWithBufferReader(
     StateManager stateManager,
     DbContextService <IModel> model,
     EntityKeyFactorySource entityKeyFactorySource,
     EntityMaterializerSource entityMaterializerSource,
     ClrCollectionAccessorSource collectionAccessorSource,
     ClrPropertySetterSource propertySetterSource,
     SqlServerConnection connection,
     SqlServerCommandBatchPreparer batchPreparer,
     SqlServerBatchExecutor batchExecutor,
     ILoggerFactory loggerFactory)
     : base(stateManager, model, entityKeyFactorySource, entityMaterializerSource,
            collectionAccessorSource, propertySetterSource, connection, batchPreparer, batchExecutor, loggerFactory)
 {
 }
Exemple #15
0
 public SqlServerDataStore(
     [NotNull] StateManager stateManager,
     [NotNull] DbContextService <IModel> model,
     [NotNull] EntityKeyFactorySource entityKeyFactorySource,
     [NotNull] EntityMaterializerSource entityMaterializerSource,
     [NotNull] ClrCollectionAccessorSource collectionAccessorSource,
     [NotNull] ClrPropertySetterSource propertySetterSource,
     [NotNull] SqlServerConnection connection,
     [NotNull] SqlServerCommandBatchPreparer batchPreparer,
     [NotNull] SqlServerBatchExecutor batchExecutor,
     [NotNull] ILoggerFactory loggerFactory)
     : base(stateManager, model, entityKeyFactorySource, entityMaterializerSource,
            collectionAccessorSource, propertySetterSource, connection, batchPreparer, batchExecutor, loggerFactory)
 {
 }
        public NavigationFixer(
            [NotNull] DbContextConfiguration configuration,
            [NotNull] ClrPropertyGetterSource getterSource,
            [NotNull] ClrPropertySetterSource setterSource,
            [NotNull] ClrCollectionAccessorSource collectionAccessorSource)
        {
            Check.NotNull(configuration, "configuration");
            Check.NotNull(getterSource, "getterSource");
            Check.NotNull(setterSource, "setterSource");
            Check.NotNull(collectionAccessorSource, "collectionAccessorSource");

            _configuration = configuration;
            _getterSource = getterSource;
            _setterSource = setterSource;
            _collectionAccessorSource = collectionAccessorSource;
        }
Exemple #17
0
        public NavigationFixer(
            [NotNull] ClrPropertyGetterSource getterSource,
            [NotNull] ClrPropertySetterSource setterSource,
            [NotNull] ClrCollectionAccessorSource collectionAccessorSource,
            [NotNull] DbContextService <IModel> model)
        {
            Check.NotNull(getterSource, "getterSource");
            Check.NotNull(setterSource, "setterSource");
            Check.NotNull(collectionAccessorSource, "collectionAccessorSource");
            Check.NotNull(model, "model");

            _getterSource             = getterSource;
            _setterSource             = setterSource;
            _collectionAccessorSource = collectionAccessorSource;
            _model = model;
        }
Exemple #18
0
        public NavigationFixer(
            [NotNull] DbContextConfiguration configuration,
            [NotNull] ClrPropertyGetterSource getterSource,
            [NotNull] ClrPropertySetterSource setterSource,
            [NotNull] ClrCollectionAccessorSource collectionAccessorSource)
        {
            Check.NotNull(configuration, "configuration");
            Check.NotNull(getterSource, "getterSource");
            Check.NotNull(setterSource, "setterSource");
            Check.NotNull(collectionAccessorSource, "collectionAccessorSource");

            _configuration            = configuration;
            _getterSource             = getterSource;
            _setterSource             = setterSource;
            _collectionAccessorSource = collectionAccessorSource;
        }
Exemple #19
0
        public ForeignKeyValuePropagator(
            [NotNull] ClrPropertyGetterSource getterSource,
            [NotNull] ClrCollectionAccessorSource collectionAccessorSource,
            [NotNull] DbContextService <ValueGeneratorCache> valueGeneratorCache,
            [NotNull] DbContextService <DataStoreServices> storeServices)
        {
            Check.NotNull(getterSource, "getterSource");
            Check.NotNull(collectionAccessorSource, "collectionAccessorSource");
            Check.NotNull(valueGeneratorCache, "valueGeneratorCache");
            Check.NotNull(storeServices, "storeServices");

            _getterSource             = getterSource;
            _collectionAccessorSource = collectionAccessorSource;
            _valueGeneratorCache      = valueGeneratorCache;
            _storeServices            = storeServices;
        }
Exemple #20
0
        public QueryBuffer(
            [NotNull] StateManager stateManager,
            [NotNull] EntityKeyFactorySource entityKeyFactorySource,
            [NotNull] EntityMaterializerSource materializerSource,
            [NotNull] ClrCollectionAccessorSource clrCollectionAccessorSource,
            [NotNull] ClrPropertySetterSource clrPropertySetterSource)
        {
            Check.NotNull(stateManager, "stateManager");
            Check.NotNull(entityKeyFactorySource, "entityKeyFactorySource");
            Check.NotNull(materializerSource, "materializerSource");
            Check.NotNull(clrCollectionAccessorSource, "clrCollectionAccessorSource");
            Check.NotNull(clrPropertySetterSource, "clrPropertySetterSource");

            _stateManager                = stateManager;
            _entityKeyFactorySource      = entityKeyFactorySource;
            _materializerSource          = materializerSource;
            _clrCollectionAccessorSource = clrCollectionAccessorSource;
            _clrPropertySetterSource     = clrPropertySetterSource;
        }
        private static void AccessorTest(string navigationName, Func <MyEntity, IEnumerable <Random> > reader)
        {
            var entityType = new EntityType(typeof(MyEntity));
            var navigation = entityType.AddNavigation(new Navigation(Mock.Of <ForeignKey>(), navigationName));

            var accessor = new ClrCollectionAccessorSource().GetAccessor(navigation);

            var entity = new MyEntity();
            var value  = new Random();

            Assert.False(accessor.Contains(entity, value));
            Assert.DoesNotThrow(() => accessor.Remove(entity, value));

            accessor.Add(entity, value);

            Assert.True(accessor.Contains(entity, value));
            Assert.Equal(1, reader(entity).Count());

            accessor.Remove(entity, value);

            Assert.False(accessor.Contains(entity, value));
            Assert.Equal(0, reader(entity).Count());
        }
Exemple #22
0
        public static EntityServicesBuilder UseClrCollectionAccessorSource([NotNull] this EntityServicesBuilder builder, [NotNull] ClrCollectionAccessorSource source)
        {
            Check.NotNull(source, "source");

            builder.ServiceCollection.AddInstance(source);

            return(builder);
        }