Beispiel #1
0
        internal static CsdlEntityContainer EntityContainer(
            string name,
            string extends                         = null,
            CsdlEntitySet[] entitySets             = default(CsdlEntitySet[]),
            CsdlSingleton[] singletons             = default(CsdlSingleton[]),
            CsdlOperationImport[] operationImports = default(CsdlOperationImport[]),
            CsdlLocation location                  = null)
        {
            if (entitySets == null)
            {
                entitySets = new CsdlEntitySet[] { };
            }

            if (operationImports == null)
            {
                operationImports = new CsdlOperationImport[] { };
            }

            if (singletons == null)
            {
                singletons = new CsdlSingleton[] { };
            }

            return(new CsdlEntityContainer(
                       name,
                       extends,
                       entitySets,
                       singletons,
                       operationImports,
                       location));
        }
Beispiel #2
0
        public CsdlSemanticsEntitySetTests()
        {
            var referentialConstraints = new List <CsdlReferentialConstraint>();
            var csdlNavigation         = new CsdlNavigationProperty("Navigation", null, null, null, false, null, referentialConstraints, null, null);

            this.csdlEntityType = new CsdlEntityType("EntityType", null, false, false, false, null, Enumerable.Empty <CsdlProperty>(), new[] { csdlNavigation }, null, null);
            var goodBinding = new CsdlNavigationPropertyBinding("Navigation", "EntitySet", null, new CsdlLocation(1, 1));

            this.csdlEntitySet = new CsdlEntitySet("EntitySet", "FQ.NS.EntityType", new[] { goodBinding }, null, null);
            this.csdlContainer = new CsdlEntityContainer("Container", null, new[] { this.csdlEntitySet }, Enumerable.Empty <CsdlSingleton>(), Enumerable.Empty <CsdlOperationImport>(), null, null);

            var derivedCsdlNavigation = new CsdlNavigationProperty("DerivedNavigation", null, null, null, false, null, referentialConstraints, null, null);
            var derivedCsdlEntityType = new CsdlEntityType("DerivedEntityType", "FQ.NS.EntityType", false, false, false, null, Enumerable.Empty <CsdlProperty>(), new[] { derivedCsdlNavigation }, null, null);

            var unrelatedCsdlEntityType = new CsdlEntityType("UnrelatedEntityType", null, false, false, false, null, Enumerable.Empty <CsdlProperty>(), Enumerable.Empty <CsdlNavigationProperty>(), null, null);

            var csdlSchema = new CsdlSchema("FQ.NS", null, null, new[] { this.csdlEntityType, derivedCsdlEntityType, unrelatedCsdlEntityType }, Enumerable.Empty <CsdlEnumType>(), Enumerable.Empty <CsdlOperation>(), Enumerable.Empty <CsdlTerm>(), Enumerable.Empty <CsdlEntityContainer>(), Enumerable.Empty <CsdlAnnotations>(), Enumerable.Empty <CsdlTypeDefinition>(), null, null);
            var csdlModel  = new CsdlModel();

            csdlModel.AddSchema(csdlSchema);
            var semanticModel = new CsdlSemanticsModel(csdlModel, new EdmDirectValueAnnotationsManager(), Enumerable.Empty <IEdmModel>());

            this.semanticSchema    = new CsdlSemanticsSchema(semanticModel, csdlSchema);
            this.semanticContainer = new CsdlSemanticsEntityContainer(this.semanticSchema, this.csdlContainer);

            this.semanticEntityType = semanticModel.FindType("FQ.NS.EntityType") as CsdlSemanticsEntityTypeDefinition;
            this.semanticEntityType.Should().NotBeNull();
            this.navigationProperty = this.semanticEntityType.FindProperty("Navigation") as CsdlSemanticsNavigationProperty;
            this.navigationProperty.Should().NotBeNull();
        }
 public CsdlSemanticsEntitySet(CsdlSemanticsEntityContainer container, CsdlEntitySet entitySet) : base(entitySet)
 {
     this.elementTypeCache       = new Cache <CsdlSemanticsEntitySet, IEdmEntityType>();
     this.navigationTargetsCache = new Cache <CsdlSemanticsEntitySet, IEnumerable <IEdmNavigationTargetMapping> >();
     this.container = container;
     this.entitySet = entitySet;
 }
        public IEdmEntitySet FindNavigationTarget(IEdmNavigationProperty property)
        {
            IEdmEntitySet entitySet;
            CsdlSemanticsNavigationProperty csdlSemanticsNavigationProperty = property as CsdlSemanticsNavigationProperty;

            if (csdlSemanticsNavigationProperty != null)
            {
                IEnumerator <IEdmEntityContainer> enumerator = this.Model.EntityContainers().GetEnumerator();
                using (enumerator)
                {
                    while (enumerator.MoveNext())
                    {
                        CsdlSemanticsEntityContainer current = (CsdlSemanticsEntityContainer)enumerator.Current;
                        IEnumerable <CsdlSemanticsAssociationSet> csdlSemanticsAssociationSets = current.FindAssociationSets(csdlSemanticsNavigationProperty.Association);
                        if (csdlSemanticsAssociationSets == null)
                        {
                            continue;
                        }
                        IEnumerator <CsdlSemanticsAssociationSet> enumerator1 = csdlSemanticsAssociationSets.GetEnumerator();
                        using (enumerator1)
                        {
                            while (enumerator1.MoveNext())
                            {
                                CsdlSemanticsAssociationSet    csdlSemanticsAssociationSet = enumerator1.Current;
                                CsdlSemanticsAssociationSetEnd end1 = csdlSemanticsAssociationSet.End1 as CsdlSemanticsAssociationSetEnd;
                                CsdlSemanticsAssociationSetEnd end2 = csdlSemanticsAssociationSet.End2 as CsdlSemanticsAssociationSetEnd;
                                if (csdlSemanticsAssociationSet.End1.EntitySet != this || csdlSemanticsNavigationProperty.To != csdlSemanticsAssociationSet.End2.Role)
                                {
                                    if (csdlSemanticsAssociationSet.End2.EntitySet != this || csdlSemanticsNavigationProperty.To != csdlSemanticsAssociationSet.End1.Role)
                                    {
                                        continue;
                                    }
                                    this.Model.SetAssociationSetName(csdlSemanticsAssociationSet.End2.EntitySet, property, csdlSemanticsAssociationSet.Name);
                                    if (end1 != null && end2 != null)
                                    {
                                        this.Model.SetAssociationSetAnnotations(end2.EntitySet, property, csdlSemanticsAssociationSet.DirectValueAnnotations, end2.DirectValueAnnotations, end1.DirectValueAnnotations);
                                    }
                                    entitySet = csdlSemanticsAssociationSet.End1.EntitySet;
                                    return(entitySet);
                                }
                                else
                                {
                                    this.Model.SetAssociationSetName(csdlSemanticsAssociationSet.End1.EntitySet, property, csdlSemanticsAssociationSet.Name);
                                    if (end1 != null && end2 != null)
                                    {
                                        this.Model.SetAssociationSetAnnotations(end1.EntitySet, property, csdlSemanticsAssociationSet.DirectValueAnnotations, end1.DirectValueAnnotations, end2.DirectValueAnnotations);
                                    }
                                    entitySet = csdlSemanticsAssociationSet.End2.EntitySet;
                                    return(entitySet);
                                }
                            }
                        }
                    }
                    return(null);
                }
                return(entitySet);
            }
            return(null);
        }
Beispiel #5
0
        public void ParseCsdlEntityContainerWithMembersWorksAsExpected()
        {
            string json = @"""DemoService"": {
  ""$Kind"": ""EntityContainer"",
  ""Products"": {
     ""$Type"": ""self.Product"",
     ""$Collection"": true
    },
   ""Me"": {
     ""$Type"": ""self.User""
    },
   ""LeaveRequestApproval"": {
    ""$Action"": ""self.Approval""
  },
 ""ProductsByRating"": {
    ""$EntitySet"": ""Products"",
    ""$Function"": ""self.ProductsByRating""
  },
 ""@UI.DisplayName"": ""Supplier Directory""
}";

            CsdlEntityContainer entityContainer = ParseCsdlSchemaElement(json, SchemaJsonParser.ParseCsdlEntityContainer);

            Assert.NotNull(entityContainer);

            Assert.Equal("DemoService", entityContainer.Name);

            CsdlEntitySet entitySet = Assert.Single(entityContainer.EntitySets);

            Assert.Equal("Products", entitySet.Name);

            CsdlSingleton singleton = Assert.Single(entityContainer.Singletons);

            Assert.Equal("Me", singleton.Name);

            Assert.Equal(2, entityContainer.OperationImports.Count());
            CsdlActionImport actionImport = Assert.Single(entityContainer.OperationImports.OfType <CsdlActionImport>());

            Assert.Equal("LeaveRequestApproval", actionImport.Name);

            CsdlFunctionImport functionImport = Assert.Single(entityContainer.OperationImports.OfType <CsdlFunctionImport>());

            Assert.Equal("ProductsByRating", functionImport.Name);

            CsdlAnnotation annotation = Assert.Single(entityContainer.VocabularyAnnotations);

            Assert.Equal("UI.DisplayName", annotation.Term);
            Assert.IsType <CsdlConstantExpression>(annotation.Expression);
        }
Beispiel #6
0
        public void EnsureEntitySetReferenceResolvesCorrectly()
        {
            var action              = CsdlBuilder.Action("Checkout");
            var actionImport        = new CsdlActionImport("Checkout", "FQ.NS.Checkout", "EntitySet" /*entitySet*/, null /*documentation*/, testLocation);
            var csdlEntitySet       = new CsdlEntitySet("EntitySet", "FQ.NS.EntityType", Enumerable.Empty <CsdlNavigationPropertyBinding>(), null, testLocation);
            var csdlEntityContainer = CsdlBuilder.EntityContainer("Container", entitySets: new CsdlEntitySet[] { csdlEntitySet });

            var semanticSchema = CreateCsdlSemanticsSchema(csdlEntityContainer, action);
            var semanticAction = new CsdlSemanticsAction(semanticSchema, action);

            var csdlSemanticEntityContainer = new CsdlSemanticsEntityContainer(semanticSchema, csdlEntityContainer);
            var semanticActionImport        = new CsdlSemanticsActionImport(csdlSemanticEntityContainer, actionImport, semanticAction);

            semanticActionImport.Action.Should().NotBeNull();
            semanticActionImport.Action.Name.Should().Be("Checkout");
            var edmEntitySetReference = (IEdmEntitySetReferenceExpression)semanticActionImport.EntitySet;

            edmEntitySetReference.ReferencedEntitySet.Name.Should().Be("EntitySet");
        }
Beispiel #7
0
 public CsdlSemanticsEntitySet(CsdlSemanticsEntityContainer container, CsdlEntitySet entitySet)
     : base(container, entitySet)
 {
 }
Beispiel #8
0
 public CsdlSemanticsEntitySet(CsdlSemanticsEntityContainer container, CsdlEntitySet entitySet)
     : base(entitySet)
 {
     this.container = container;
     this.entitySet = entitySet;
 }