public static Pluralize ( string value ) : string | ||
value | string | The singular text for which to get /// the plural form. |
Результат | string |
private string CreateServiceResponse() { var workspaceElement = new XElement( NsApp + "workspace", new XElement(NsAtom + "title", "Default") ); foreach (var type in _sessionFactory.GetAllClassMetadata().Values) { string name = Inflector.Pluralize(GetPersister(type).TableName); workspaceElement.Add(new XElement( NsApp + "collection", new XAttribute("href", name), new XElement( NsAtom + "title", name ) )); } var document = new XDocument( new XElement( NsApp + "service", new XAttribute(XNamespace.Xmlns + "atom", NsAtom), new XAttribute(XNamespace.Xmlns + "app", NsApp), new XAttribute("xmlns", NsApp), new XAttribute(XNamespace.Xml + "base", ServiceNamespace), workspaceElement ) ); return(document.ToString(SaveOptions.DisableFormatting)); }
private void PrepareDataResponse() { DataServiceVersion = "2.0;"; string entityName; var path = new PathParser(_path).Parse(); if (path.Members.Count > 2) { throw new ODataException(ErrorMessages.PathParser_InvalidPath); } entityName = Inflector.Singularize(path.Members[path.Members.Count - 1].Name); IEnumerable entities; object parentEntity = null; string parentEntityName = Inflector.Singularize(path.Members[0].Name); if (path.Members[0].IdExpression != null) { object parentId = path.Members[0].IdExpression.Value; parentEntity = _session.Load(parentEntityName, parentId); } if (parentEntity != null && path.Members.Count == 1) { entities = new[] { parentEntity }; } else { var criteria = String.IsNullOrEmpty(_queryString) ? _session.CreateCriteria(entityName) : _session.ODataQuery(entityName, _queryString); if (path.Members.Count == 2) { if (parentEntity == null || path.Members[1].IdExpression != null) { throw new ODataException(ErrorMessages.PathParser_InvalidPath); } var parentPersister = _service.GetPersister(parentEntityName); var property = GetProperty(parentPersister, path.Members[1].Name); var collectionType = property.Type as CollectionType; var manyToOneType = property.Type as ManyToOneType; if (collectionType != null) { criteria.Add(Restrictions.Eq(parentEntityName, parentEntity)); } else if (manyToOneType != null) { /** * 01.06.2020: EntityMode.Poco removed; method GetPropertyValue supports only one parameter */ var childEntity = parentPersister.GetPropertyValue(parentEntity, property.Name /*, EntityMode.Poco*/); var childPersister = _service.GetPersister(property.Type.ReturnedClass); /** * 01.06.2020: EntityMode.Poco removed; method GetIdentifier supports only one parameter */ object idValue = childPersister.GetIdentifier(childEntity /*, EntityMode.Poco*/); criteria.Add(Restrictions.Eq(childPersister.IdentifierPropertyName, idValue)); } else { throw new ODataException(String.Format(ErrorMessages.ODataRequest_PropertyNotARelationship, path.Members[1].Name, parentPersister.EntityType.ReturnedClass.Name)); } } entities = criteria.List(); } var feedElement = new XElement( ODataService.NsAtom + "feed", new XAttribute(XNamespace.Xml + "base", _service.ServiceNamespace), new XAttribute(XNamespace.Xmlns + "d", ODataService.NsDataServices), new XAttribute(XNamespace.Xmlns + "m", ODataService.NsMetadata), new XAttribute("xmlns", ODataService.NsAtom), new XElement( ODataService.NsAtom + "title", new XAttribute("type", "text"), _path ), new XElement( ODataService.NsAtom + "id", _service.ServiceNamespace.ToString().TrimEnd('/') + "/" + _path ), new XElement( ODataService.NsAtom + "updated", DateTime.UtcNow.ToString("s") + "Z" ), new XElement( ODataService.NsAtom + "link", new XAttribute("rel", "self"), new XAttribute("title", _path), new XAttribute("href", _path) ) ); var persister = _service.GetPersister(entityName); foreach (var entity in entities) { var propertiesElement = new XElement( ODataService.NsMetadata + "properties" ); /** * 01.06.2020: EntityMode.Poco removed; method GetIdentifier supports only one parameter */ string id = Inflector.Pluralize(entityName) + "(" + LiteralUtil.EscapeValue(persister.GetIdentifier(entity /*, EntityMode.Poco*/)) + ")"; var entryElement = new XElement( ODataService.NsAtom + "entry", new XElement( ODataService.NsAtom + "id", _service.ServiceNamespace.ToString().TrimEnd('/') + "/" + id ), new XElement( ODataService.NsAtom + "author", new XElement(ODataService.NsAtom + "name") ) ); feedElement.Add(entryElement); /** * 01.06.2020: EntityMode.Poco removed; method GetIdentifier supports only one parameter */ propertiesElement.Add(AddProperty(persister.IdentifierPropertyName, persister.IdentifierType, persister.GetIdentifier(entity /*, EntityMode.Poco*/))); /** * 01.06.2020: EntityMode.Poco removed; method GetPropertyValues supports only one parameter */ var values = persister.GetPropertyValues(entity /*, EntityMode.Poco*/); for (int i = 0; i < values.Length; i++) { var propertyType = persister.PropertyTypes[i]; string propertyName = persister.PropertyNames[i]; var collectionType = propertyType as CollectionType; var manyToOneType = propertyType as ManyToOneType; if (collectionType != null || manyToOneType != null) { entryElement.Add(new XElement( ODataService.NsAtom + "link", new XAttribute("rel", ODataService.NsDataServices.ToString().TrimEnd('/') + "/related/" + propertyName), new XAttribute("type", "application/atom+xml;type=entry"), new XAttribute("title", propertyName), new XAttribute("href", id + "/" + propertyName) )); } else { propertiesElement.Add(AddProperty(propertyName, propertyType, values[i])); } } entryElement.Add( new XElement( ODataService.NsAtom + "category", new XAttribute("term", "SouthWind." + entityName), new XAttribute("schema", ODataService.NsDataServices) ) ); entryElement.Add( new XElement( ODataService.NsAtom + "content", new XAttribute("type", "application/xml"), propertiesElement ) ); } Response = new XDocument(feedElement).ToString(SaveOptions.DisableFormatting); }
private string CreateMetadataResponse() { var schemaElement = new XElement( NsEdm + "Schema", new XAttribute(XNamespace.Xmlns + "d", NsDataServices), new XAttribute(XNamespace.Xmlns + "m", NsMetadata), new XAttribute("xmlns", NsEdm), new XAttribute("Namespace", SchemaNamespace) ); var entityContainerElement = new XElement( NsEdm + "EntityContainer", new XAttribute("Name", ContainerName), new XAttribute(NsMetadata + "IsDefaultEntityContainer", "true") ); var associations = new Dictionary <string, XElement>(); foreach (var type in _sessionFactory.GetAllClassMetadata().Values) { var persister = GetPersister(type); string entityName = persister.EntityType.ReturnedClass.Name; var entityElement = new XElement( NsEdm + "EntityType", new XAttribute("Name", entityName), new XElement( NsEdm + "Key", new XElement( NsEdm + "PropertyRef", new XAttribute("Name", persister.IdentifierPropertyName) ) ) ); schemaElement.Add(entityElement); entityElement.Add(new XElement( NsEdm + "Property", new XAttribute("Name", persister.IdentifierPropertyName), new XAttribute("Type", LiteralUtil.GetEdmType(persister.IdentifierType.ReturnedClass)), new XAttribute("Nullable", "false") )); foreach (var property in persister.EntityMetamodel.Properties) { var collectionType = property.Type as CollectionType; var manyToOneType = property.Type as ManyToOneType; var propertyType = property.Type.ReturnedClass; if (collectionType != null || manyToOneType != null) { string fromRole; string toRole; string relationship; string multiplicity; if (collectionType != null) { propertyType = propertyType.GetGenericArguments()[0]; fromRole = entityName + "_" + property.Name; toRole = propertyType.Name + "_" + entityName; relationship = toRole + "_" + fromRole; multiplicity = "*"; } else { fromRole = entityName + "_" + property.Name; toRole = propertyType.Name + "_" + Inflector.Pluralize(entityName); relationship = fromRole + "_" + toRole; multiplicity = "0..1"; } entityElement.Add(new XElement( NsEdm + "NavigationProperty", new XAttribute("Name", property.Name), new XAttribute("Relationship", SchemaNamespace + "." + relationship), new XAttribute("FromRole", fromRole), new XAttribute("ToRole", toRole) )); XElement association; if (!associations.TryGetValue(relationship, out association)) { association = new XElement( NsEdm + "Association", new XAttribute("Name", relationship) ); associations.Add(relationship, association); } association.Add(new XElement( NsEdm + "End", new XAttribute("Role", toRole), new XAttribute("Type", SchemaNamespace + "." + propertyType.Name), new XAttribute("Multiplicity", multiplicity) )); } else { entityElement.Add(new XElement( NsEdm + "Property", new XAttribute("Name", property.Name), new XAttribute("Type", LiteralUtil.GetEdmType(propertyType)), new XAttribute("Nullable", property.IsNullable ? "true" : "false") )); } } entityContainerElement.Add(new XElement( NsEdm + "EntitySet", new XAttribute("Name", Inflector.Pluralize(entityName)), new XAttribute("EntityType", SchemaNamespace + "." + entityName) )); } foreach (var association in associations.Values) { schemaElement.Add(association); } schemaElement.Add(entityContainerElement); var document = new XDocument( new XElement( NsEdmx + "Edmx", new XAttribute(XNamespace.Xmlns + "edmx", NsEdmx), new XAttribute("Version", "1.0"), new XElement( NsEdmx + "DataServices", new XAttribute(XNamespace.Xmlns + "m", NsMetadata), new XAttribute(NsMetadata + "DataServiceVersion", "2.0"), schemaElement ) ) ); return(document.ToString(SaveOptions.DisableFormatting)); }