public void CreateTransientMetadataWorkspace_creates_workspace_with_provided_store_entity_sets()
        {
            var property =
                EdmProperty.CreatePrimitive(
                    "Id",
                    ProviderManifest.GetStoreTypes().Single(t => t.PrimitiveTypeKind == PrimitiveTypeKind.Int32));

            property.Nullable = false;

            var entityType =
                EntityType.Create("EntityType", "MyModel", DataSpace.SSpace, new[] { "Id" }, new[] { property }, null);

            var entitySet = EntitySet.Create("EntityTypeSet", "dbo", "EntityTypes", null, entityType, null);

            var workspace =
                EntitySetDefiningQueryConverter.CreateTransientMetadataWorkspace(
                    new List <EntitySet> {
                entitySet
            },
                    EntityFrameworkVersion.Version3,
                    "System.Data.SqlClient", "2008", ProviderManifest);

            Assert.NotNull(workspace);
            var storeItemCollection = (StoreItemCollection)workspace.GetItemCollection(DataSpace.SSpace);

            Assert.NotNull(storeItemCollection);
            Assert.Equal(1, storeItemCollection.GetEntityContainer("StoreModelContainer").EntitySets.Count);
            Assert.Equal(
                "EntityTypeSet",
                storeItemCollection.GetEntityContainer("StoreModelContainer").EntitySets.Single().Name);
            Assert.Equal(1, storeItemCollection.GetItems <EntityType>().Count);
            Assert.Equal("EntityType", storeItemCollection.GetItems <EntityType>().Single().Name);
            Assert.NotNull(workspace.GetItemCollection(DataSpace.CSpace));
            Assert.NotNull(workspace.GetItemCollection(DataSpace.CSSpace));
        }
        public void CloneWithDefiningQuery_does_not_creat_schema_and_table_extended_attributes_if_they_are_null()
        {
            var property =
                EdmProperty.CreatePrimitive(
                    "Id",
                    ProviderManifest.GetStoreTypes().Single(t => t.PrimitiveTypeKind == PrimitiveTypeKind.Int32));

            var customMetadataProperty =
                MetadataProperty.Create(
                    "http://tempUri:myProperty",
                    TypeUsage.CreateDefaultTypeUsage(PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String)),
                    "value");

            var entityType =
                EntityType.Create("EntityType", "MyModel", DataSpace.SSpace, new[] { "Id" }, new[] { property }, null);

            var entitySet = EntitySet.Create("EntityTypeSet", null, null, null, entityType, new[] { customMetadataProperty });

            var clonedEntitySet = EntitySetDefiningQueryConverter.CloneWithDefiningQuery(entitySet, "definingQuery");

            Assert.Null(clonedEntitySet.Schema);
            Assert.Null(clonedEntitySet.Table);
            Assert.False(entitySet.MetadataProperties.Any(p => p.Name.EndsWith(StoreSchemaAttributeNamespace + ":Schema")));
            Assert.False(entitySet.MetadataProperties.Any(p => p.Name.EndsWith(StoreSchemaAttributeNamespace + ":Name")));
        }
        public void Convert_can_convert_entitysets_without_defining_queries_to_entitysets_with_defining_queries()
        {
            var property1 =
                EdmProperty.CreatePrimitive(
                    "Id",
                    ProviderManifest.GetStoreTypes().Single(t => t.PrimitiveTypeKind == PrimitiveTypeKind.Int32));

            property1.Nullable = false;

            var entityType1 =
                EntityType.Create("EntityType1", "MyModel", DataSpace.SSpace, new[] { "Id" }, new[] { property1 }, null);

            var property2 =
                EdmProperty.CreatePrimitive(
                    "Id",
                    ProviderManifest.GetStoreTypes().Single(t => t.PrimitiveTypeKind == PrimitiveTypeKind.Int32));

            property2.Nullable = false;

            var entityType2 =
                EntityType.Create("EntityType2", "MyModel", DataSpace.SSpace, new[] { "Id" }, new[] { property2 }, null);

            var entitySets =
                new List <EntitySet>
            {
                EntitySet.Create("EntityType1Set", "dbo", "EntityTypes1", null, entityType1, null),
                EntitySet.Create("EntityType2Set", "dbo", "EntityTypes2", null, entityType2, null)
            };

            var mockResolver = new Mock <IDbDependencyResolver>();

            mockResolver.Setup(
                r => r.GetService(
                    It.Is <Type>(t => t == typeof(DbProviderServices)),
                    It.IsAny <string>())).Returns(SqlProviderServices.Instance);

            var convertedEntitySets =
                EntitySetDefiningQueryConverter.Convert(
                    entitySets,
                    EntityFrameworkVersion.Version3,
                    "System.Data.SqlClient",
                    "2008",
                    mockResolver.Object).ToList();

            Assert.NotNull(convertedEntitySets);
            Assert.Equal(entitySets.Select(e => e.Name), convertedEntitySets.Select(e => e.Name));
            Assert.True(convertedEntitySets.All(e => e.DefiningQuery != null));
        }
        public void CloneWithDefiningQuery_creates_new_equivalent_entity_set_but_with_defining_query()
        {
            var property =
                EdmProperty.CreatePrimitive(
                    "Id",
                    ProviderManifest.GetStoreTypes().Single(t => t.PrimitiveTypeKind == PrimitiveTypeKind.Int32));

            var customMetadataProperty =
                MetadataProperty.Create(
                    "http://tempUri:myProperty",
                    TypeUsage.CreateDefaultTypeUsage(PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String)),
                    "value");

            var entityType =
                EntityType.Create("EntityType", "MyModel", DataSpace.SSpace, new[] { "Id" }, new[] { property }, null);

            var entitySet = EntitySet.Create("EntityTypeSet", "dbo", "EntityTypes", null, entityType, new[] { customMetadataProperty });

            var clonedEntitySet = EntitySetDefiningQueryConverter.CloneWithDefiningQuery(entitySet, "definingQuery");

            Assert.NotNull(clonedEntitySet);
            Assert.NotSame(clonedEntitySet, entitySet);
            Assert.Same(entitySet.Name, clonedEntitySet.Name);
            Assert.Same(entitySet.ElementType, clonedEntitySet.ElementType);
            Assert.Null(clonedEntitySet.Schema);
            Assert.Null(clonedEntitySet.Table);
            Assert.Equal(
                entitySet.Schema,
                clonedEntitySet.MetadataProperties.Single(p => p.Name == StoreSchemaAttributeNamespace + ":Schema")
                .Value);
            Assert.Equal(
                entitySet.Table,
                clonedEntitySet.MetadataProperties.Single(p => p.Name == StoreSchemaAttributeNamespace + ":Name")
                .Value);

            Assert.Equal(
                entitySet.MetadataProperties.Single(p => p.Name == "http://tempUri:myProperty").Value,
                clonedEntitySet.MetadataProperties.Single(p => p.Name == "http://tempUri:myProperty").Value);
        }
        public void CreateDefiningQuery_creates_query_for_entity_set()
        {
            var property =
                EdmProperty.CreatePrimitive(
                    "Id",
                    ProviderManifest.GetStoreTypes().Single(t => t.PrimitiveTypeKind == PrimitiveTypeKind.Int32));

            property.Nullable = false;

            var entityType =
                EntityType.Create("EntityType", "MyModel", DataSpace.SSpace, new[] { "Id" }, new[] { property }, null);

            var entitySet = EntitySet.Create("EntityTypeSet", "dbo", "EntityTypes", null, entityType, null);

            var workspace =
                EntitySetDefiningQueryConverter.CreateTransientMetadataWorkspace(
                    new List <EntitySet> {
                entitySet
            },
                    EntityFrameworkVersion.Version3,
                    "System.Data.SqlClient", "2008", ProviderManifest);

            Assert.NotNull(EntitySetDefiningQueryConverter.CreateDefiningQuery(entitySet, workspace, SqlProviderServices.Instance));
        }