public override void Generate() { this.WriteLine("<ComplexProperty Name=\"{0}{1}\" TypeName=\"Model.{2}\">", propertyName, ImplementationPropertySuffix, prop.CompoundObjectDefinition.Name ); string newParent = Construct.NestedColumnName(prop, parentName); foreach (var subProp in prop.CompoundObjectDefinition.Properties.OfType <ValueTypeProperty>().Where(p => !p.IsList).OrderBy(p => p.Name)) { ModelMslEntityTypeMappingScalarProperty.Call(Host, ctx, subProp, subProp.Name, newParent); } foreach (var subProp in prop.CompoundObjectDefinition.Properties.OfType <CompoundObjectProperty>().Where(p => !p.IsList).OrderBy(p => p.Name)) { ModelMslEntityTypeMappingComplexProperty.Call(Host, ctx, subProp, subProp.Name, newParent); } this.WriteLine("</ComplexProperty>"); }
protected virtual void ApplyPropertyMappings() { var relevantRelations = cls.GetRelations() // Managed by a cache .Where(r => (r.A.Type.ID == cls.ID && r.Storage == StorageType.MergeIntoA) || (r.B.Type.ID == cls.ID && r.Storage == StorageType.MergeIntoB)) .ToList() .OrderBy(r => r.GetAssociationName()); foreach (var rel in relevantRelations) { string propertyName; string columnName; if (rel.A.Type == cls && rel.NeedsPositionStorage(RelationEndRole.A) && rel.A.Navigator != null) { propertyName = Construct.ListPositionPropertyName(rel.A); columnName = Construct.ListPositionColumnName(rel.B); this.WriteLine("<ScalarProperty Name=\"{0}\" ColumnName=\"{1}\" />", propertyName, columnName); } if (rel.B.Type == cls && rel.NeedsPositionStorage(RelationEndRole.B) && rel.B.Navigator != null) { propertyName = Construct.ListPositionPropertyName(rel.B); columnName = Construct.ListPositionColumnName(rel.A); this.WriteLine("<ScalarProperty Name=\"{0}\" ColumnName=\"{1}\" />", propertyName, columnName); } } foreach (var prop in cls.Properties.OfType <ValueTypeProperty>().Where(p => !p.IsList).OrderBy(p => p.Name)) { ModelMslEntityTypeMappingScalarProperty.Call(Host, ctx, prop, prop.Name, String.Empty); } foreach (var prop in cls.Properties.OfType <CompoundObjectProperty>().Where(p => !p.IsList).OrderBy(p => p.Name)) { ModelMslEntityTypeMappingComplexProperty.Call(Host, ctx, prop, prop.Name, String.Empty); } }
public override void Generate() { #line 31 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" this.WriteObjects("<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n"); this.WriteObjects("<Mapping Space=\"C-S\" xmlns=\"urn:schemas-microsoft-com:windows:storage:mapping:CS\">\r\n"); this.WriteObjects(" <EntityContainerMapping StorageEntityContainer=\"dbo\" CdmEntityContainer=\"Entities\">\r\n"); this.WriteObjects(" \r\n"); this.WriteObjects(" <!-- EntitySetMappings for classes -->\r\n"); #line 37 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" foreach (var cls in ctx.GetBaseClasses().OrderBy(c => c.Name)) { #line 40 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" this.WriteObjects(" <EntitySetMapping Name=\"", cls.Name, "\">\r\n"); #line 41 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" ApplyEntityTypeMapping(cls); #line 42 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" this.WriteObjects(" </EntitySetMapping>\r\n"); #line 44 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" if (cls.NeedsRightsTable()) { #line 47 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" this.WriteObjects(" <EntitySetMapping Name=\"", Construct.SecurityRulesClassName(cls), "\">\r\n"); this.WriteObjects(" <EntityTypeMapping TypeName=\"IsTypeOf(Model.", Construct.SecurityRulesClassName(cls), ")\">\r\n"); this.WriteObjects(" <MappingFragment StoreEntitySet=\"", Construct.SecurityRulesClassName(cls), "\">\r\n"); this.WriteObjects(" <ScalarProperty Name=\"ID\" ColumnName=\"ID\" />\r\n"); this.WriteObjects(" <ScalarProperty Name=\"Identity\" ColumnName=\"Identity\" />\r\n"); this.WriteObjects(" <ScalarProperty Name=\"Right\" ColumnName=\"Right\" />\r\n"); this.WriteObjects(" </MappingFragment>\r\n"); this.WriteObjects(" </EntityTypeMapping>\r\n"); this.WriteObjects(" </EntitySetMapping>\r\n"); this.WriteObjects(" <AssociationSetMapping Name=\"", Construct.SecurityRulesFKName(cls), "\" TypeName=\"Model.", Construct.SecurityRulesFKName(cls), "\" StoreEntitySet=\"", Construct.SecurityRulesClassName(cls), "\">\r\n"); this.WriteObjects(" <EndProperty Name=\"", cls.Name, "\">\r\n"); this.WriteObjects(" <ScalarProperty Name=\"ID\" ColumnName=\"ID\" />\r\n"); this.WriteObjects(" </EndProperty>\r\n"); this.WriteObjects(" <EndProperty Name=\"", Construct.SecurityRulesClassName(cls), "\">\r\n"); this.WriteObjects(" <ScalarProperty Name=\"ID\" ColumnName=\"ID\" />\r\n"); this.WriteObjects(" <ScalarProperty Name=\"Identity\" ColumnName=\"Identity\" />\r\n"); this.WriteObjects(" </EndProperty>\r\n"); this.WriteObjects(" </AssociationSetMapping>\r\n"); #line 66 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" } } #line 69 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" this.WriteObjects("\r\n"); this.WriteObjects("\r\n"); this.WriteObjects(" <!-- EntitySetMappings and AssociationSetMappings for object-object relations with a CollectionEntry -->\r\n"); #line 73 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" foreach (var rel in ctx.GetRelationsWithSeparateStorage()) { string fkAName = rel.GetRelationFkColumnName(RelationEndRole.A); string fkBName = rel.GetRelationFkColumnName(RelationEndRole.B); #line 78 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" this.WriteObjects(" <!--\r\n"); #line 80 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" RelationDebugTemplate.Call(Host, ctx, rel); #line 82 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" this.WriteObjects(" -->\r\n"); this.WriteObjects(" <EntitySetMapping Name=\"", rel.GetRelationClassName(), "\">\r\n"); this.WriteObjects(" <EntityTypeMapping TypeName=\"IsTypeOf(Model.", rel.GetRelationClassName(), ")\">\r\n"); this.WriteObjects(" <MappingFragment StoreEntitySet=\"", rel.GetRelationClassName(), "\">\r\n"); this.WriteObjects(" <ScalarProperty Name=\"ID\" ColumnName=\"ID\" />\r\n"); #line 88 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" if (rel.A.Type.ImplementsIExportable() && rel.B.Type.ImplementsIExportable()) { #line 91 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" this.WriteObjects(" <ScalarProperty Name=\"ExportGuid\" ColumnName=\"ExportGuid\" />\r\n"); #line 93 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" } if (rel.NeedsPositionStorage(RelationEndRole.A)) { #line 97 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" this.WriteObjects(" <ScalarProperty Name=\"A", Zetbox.API.Helper.PositionSuffix, "\" ColumnName=\"", fkAName, "", Zetbox.API.Helper.PositionSuffix, "\" />\r\n"); #line 99 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" } if (rel.NeedsPositionStorage(RelationEndRole.B)) { #line 104 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" this.WriteObjects(" <ScalarProperty Name=\"B", Zetbox.API.Helper.PositionSuffix, "\" ColumnName=\"", fkBName, "", Zetbox.API.Helper.PositionSuffix, "\" />\r\n"); #line 106 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" } #line 108 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" this.WriteObjects(" </MappingFragment>\r\n"); this.WriteObjects(" </EntityTypeMapping>\r\n"); this.WriteObjects(" </EntitySetMapping>\r\n"); this.WriteObjects(" <!-- A to CollectionEntry -->\r\n"); this.WriteObjects(" <AssociationSetMapping Name=\"", rel.GetRelationAssociationName(RelationEndRole.A), "\"\r\n"); this.WriteObjects(" TypeName=\"Model.", rel.GetRelationAssociationName(RelationEndRole.A), "\"\r\n"); this.WriteObjects(" StoreEntitySet=\"", rel.GetRelationClassName(), "\" >\r\n"); this.WriteObjects(" <EndProperty Name=\"", rel.A.RoleName, "\">\r\n"); this.WriteObjects(" <ScalarProperty Name=\"ID\" ColumnName=\"", fkAName, "\"/>\r\n"); this.WriteObjects(" </EndProperty>\r\n"); this.WriteObjects(" <EndProperty Name=\"CollectionEntry\">\r\n"); this.WriteObjects(" <ScalarProperty Name=\"ID\" ColumnName=\"ID\"/>\r\n"); this.WriteObjects(" </EndProperty>\r\n"); this.WriteObjects(" <Condition ColumnName=\"", fkAName, "\" IsNull=\"false\"/>\r\n"); this.WriteObjects(" </AssociationSetMapping>\r\n"); this.WriteObjects(" <!-- B to CollectionEntry -->\r\n"); this.WriteObjects(" <AssociationSetMapping Name=\"", rel.GetRelationAssociationName(RelationEndRole.B), "\"\r\n"); this.WriteObjects(" TypeName=\"Model.", rel.GetRelationAssociationName(RelationEndRole.B), "\"\r\n"); this.WriteObjects(" StoreEntitySet=\"", rel.GetRelationClassName(), "\" >\r\n"); this.WriteObjects(" <EndProperty Name=\"", rel.B.RoleName, "\">\r\n"); this.WriteObjects(" <ScalarProperty Name=\"ID\" ColumnName=\"", fkBName, "\"/>\r\n"); this.WriteObjects(" </EndProperty>\r\n"); this.WriteObjects(" <EndProperty Name=\"CollectionEntry\">\r\n"); this.WriteObjects(" <ScalarProperty Name=\"ID\" ColumnName=\"ID\"/>\r\n"); this.WriteObjects(" </EndProperty>\r\n"); this.WriteObjects(" <Condition ColumnName=\"", fkBName, "\" IsNull=\"false\"/>\r\n"); this.WriteObjects(" </AssociationSetMapping>\r\n"); this.WriteObjects("\r\n"); #line 137 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" } #line 140 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" this.WriteObjects("\r\n"); this.WriteObjects("\r\n"); this.WriteObjects(" <!-- AssociationSetMappings for direct object-object relations without a CollectionEntry -->\r\n"); #line 144 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" foreach (var rel in ctx.GetRelationsWithoutSeparateStorage()) { RelationEnd principal, dependent; switch (rel.Storage) { case StorageType.MergeIntoA: principal = rel.B; dependent = rel.A; break; case StorageType.MergeIntoB: principal = rel.A; dependent = rel.B; break; default: throw new NotImplementedException(); } #line 162 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" this.WriteObjects(" <!--\r\n"); #line 164 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" RelationDebugTemplate.Call(Host, ctx, rel); #line 166 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" this.WriteObjects(" -->\r\n"); this.WriteObjects(" <AssociationSetMapping Name=\"", rel.GetAssociationName(), "\"\r\n"); this.WriteObjects(" TypeName=\"Model.", rel.GetAssociationName(), "\"\r\n"); this.WriteObjects(" StoreEntitySet=\"", dependent.Type.Name, "\" >\r\n"); this.WriteObjects(" <EndProperty Name=\"", principal.RoleName, "\">\r\n"); this.WriteObjects(" <ScalarProperty Name=\"ID\" ColumnName=\"fk_", principal.RoleName, "\"/>\r\n"); this.WriteObjects(" </EndProperty>\r\n"); this.WriteObjects(" <EndProperty Name=\"", dependent.RoleName, "\">\r\n"); this.WriteObjects(" <ScalarProperty Name=\"ID\" ColumnName=\"ID\"/>\r\n"); this.WriteObjects(" </EndProperty>\r\n"); this.WriteObjects(" <Condition ColumnName=\"fk_", principal.RoleName, "\" IsNull=\"false\"/>\r\n"); this.WriteObjects(" </AssociationSetMapping>\r\n"); #line 179 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" } #line 182 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" this.WriteObjects("\r\n"); this.WriteObjects(" <!-- EntitySetMappings and AssociationSetMappings for object-value CollectionEntrys -->\r\n"); #line 185 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" foreach (var prop in ctx.GetQuery <ValueTypeProperty>() .Where(p => p.IsList && !p.IsCalculated) .Where(p => p.ObjectClass is ObjectClass) .OrderBy(p => p.ObjectClass.Name) .ThenBy(p => p.Name)) { #line 192 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" this.WriteObjects(" <EntitySetMapping Name=\"", prop.GetCollectionEntryClassName(), "\">\r\n"); this.WriteObjects(" <EntityTypeMapping TypeName=\"IsTypeOf(Model.", prop.GetCollectionEntryClassName(), ")\">\r\n"); this.WriteObjects(" <MappingFragment StoreEntitySet=\"", prop.GetCollectionEntryClassName(), "\">\r\n"); this.WriteObjects(" <ScalarProperty Name=\"ID\" ColumnName=\"ID\" />\r\n"); this.WriteObjects(" <ScalarProperty Name=\"Value\" ColumnName=\"", prop.Name, "\" />\r\n"); #line 198 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" if (prop.HasPersistentOrder) { #line 201 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" this.WriteObjects(" <ScalarProperty Name=\"B", Zetbox.API.Helper.PositionSuffix, "\" ColumnName=\"BIndex\" />\r\n"); #line 203 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" } #line 205 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" this.WriteObjects(" </MappingFragment>\r\n"); this.WriteObjects(" </EntityTypeMapping>\r\n"); this.WriteObjects(" </EntitySetMapping>\r\n"); this.WriteObjects(" <AssociationSetMapping Name=\"", prop.GetAssociationName(), "\"\r\n"); this.WriteObjects(" TypeName=\"Model.", prop.GetAssociationName(), "\"\r\n"); this.WriteObjects(" StoreEntitySet=\"", prop.GetCollectionEntryClassName(), "\" >\r\n"); this.WriteObjects(" <EndProperty Name=\"", prop.ObjectClass.Name, "\">\r\n"); this.WriteObjects(" <ScalarProperty Name=\"ID\" ColumnName=\"fk_", prop.ObjectClass.Name, "\"/>\r\n"); this.WriteObjects(" </EndProperty>\r\n"); this.WriteObjects(" <EndProperty Name=\"CollectionEntry\">\r\n"); this.WriteObjects(" <ScalarProperty Name=\"ID\" ColumnName=\"ID\"/>\r\n"); this.WriteObjects(" </EndProperty>\r\n"); this.WriteObjects(" <Condition ColumnName=\"fk_", prop.ObjectClass.Name, "\" IsNull=\"false\"/>\r\n"); this.WriteObjects(" </AssociationSetMapping>\r\n"); #line 220 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" } #line 223 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" this.WriteObjects("\r\n"); this.WriteObjects(" <!-- EntitySetMappings and AssociationSetMappings for object-struct CollectionEntrys -->\r\n"); #line 226 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" foreach (var prop in ctx.GetQuery <CompoundObjectProperty>() .Where(p => p.IsList) // && !p.IsCalculated) .Where(p => p.ObjectClass is ObjectClass) .OrderBy(p => p.ObjectClass.Name) .ThenBy(p => p.Name)) { #line 233 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" this.WriteObjects(" <EntitySetMapping Name=\"", prop.GetCollectionEntryClassName(), "\">\r\n"); this.WriteObjects(" <EntityTypeMapping TypeName=\"IsTypeOf(Model.", prop.GetCollectionEntryClassName(), ")\">\r\n"); this.WriteObjects(" <MappingFragment StoreEntitySet=\"", prop.GetCollectionEntryClassName(), "\">\r\n"); this.WriteObjects(" <ScalarProperty Name=\"ID\" ColumnName=\"ID\" />\r\n"); this.WriteObjects(" "); #line 237 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" ModelMslEntityTypeMappingComplexProperty.Call(Host, ctx, prop, "Value", string.Empty); #line 239 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" if (prop.HasPersistentOrder) { #line 242 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" this.WriteObjects(" <ScalarProperty Name=\"Value", Zetbox.API.Helper.PositionSuffix, "\" ColumnName=\"BIndex\" />\r\n"); #line 244 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" } #line 246 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" this.WriteObjects(" </MappingFragment>\r\n"); this.WriteObjects(" </EntityTypeMapping>\r\n"); this.WriteObjects(" </EntitySetMapping>\r\n"); this.WriteObjects(" <AssociationSetMapping Name=\"", prop.GetAssociationName(), "\"\r\n"); this.WriteObjects(" TypeName=\"Model.", prop.GetAssociationName(), "\"\r\n"); this.WriteObjects(" StoreEntitySet=\"", prop.GetCollectionEntryClassName(), "\" >\r\n"); this.WriteObjects(" <EndProperty Name=\"", prop.ObjectClass.Name, "\">\r\n"); this.WriteObjects(" <ScalarProperty Name=\"ID\" ColumnName=\"fk_", prop.ObjectClass.Name, "\"/>\r\n"); this.WriteObjects(" </EndProperty>\r\n"); this.WriteObjects(" <EndProperty Name=\"CollectionEntry\">\r\n"); this.WriteObjects(" <ScalarProperty Name=\"ID\" ColumnName=\"ID\"/>\r\n"); this.WriteObjects(" </EndProperty>\r\n"); this.WriteObjects(" <Condition ColumnName=\"fk_", prop.ObjectClass.Name, "\" IsNull=\"false\"/>\r\n"); this.WriteObjects(" </AssociationSetMapping>\r\n"); #line 261 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" } #line 264 "P:\zetbox\Zetbox.DalProvider.EF.Generator\Templates\EfModel\Model.msl.cst" this.WriteObjects("\r\n"); this.WriteObjects(" <FunctionImportMapping FunctionImportName=\"GetContinuousSequenceNumber\" FunctionName=\"Model.Store.GetContinuousSequenceNumber\" />\r\n"); this.WriteObjects(" <FunctionImportMapping FunctionImportName=\"GetSequenceNumber\" FunctionName=\"Model.Store.GetSequenceNumber\" />\r\n"); this.WriteObjects(" </EntityContainerMapping>\r\n"); this.WriteObjects("</Mapping>"); }