/ / Is breeze fornisce supporto per lavorare con c # Enums - enums, breeze

È brezza fornire supporto per lavorare con c # Enums - enum, brezza

Voglio popolare i miei menu a discesa con enum usando la brezza. Mostra enum nei metadati della brezza ma non ho trovato il modo di consumarlo. Breeze fornisce supporto ancora per funzionare con c # enum?

risposte:

0 per risposta № 1

Se si utilizza un server Breeze WebApi standardquindi i valori di enum dovrebbero essere tutti come stringhe e possono essere salvati sul server anche come stringhe. L'implementazione predefinita del server Breeze WebApi consente di convertire automaticamente le stringhe nei valori enum corretti in entrambe le direzioni.

(Nota: questo non funzionerà con un server che utilizza l'attuale provider MS WebApi / OData perché MS non supporta ancora enumerazioni con questo provider - MS lo supporterà nella prossima versione 4.0.)

Quindi, per esempio, supponendo che tu avessi un enum lato server che assomigliasse a questo:

public enum RoleType {
Guest = 0,
Restricted = 1,
Standard = 2,
Admin = 3
}

in combinazione con una classe "Role" che aveva una proprietà "RoleType", la seguente query avrebbe funzionato:

    var query = new EntityQuery("Roles").where("RoleType", "==", "Restricted");
myEntityManager.executeQuery(query).then(...);

Allo stesso modo, se si desidera modificare un RoleType per un determinato ruolo, è possibile

    role.RoleType = "Standard"; // assuming breeze backingStore adapter.
myEntityManager.saveChanges();

0 per risposta № 2

Se stai generando metadati di brezza offlinequindi è possibile ottenere tutte le definizioni di Enum nei metadati stessi e creare un dizionario JS (array associato) per popolare tutti i tipi di enum e le relative definizioni.

Bene, la mia situazione era che stavo usando NancyFx (No EF) + Breeze + AngularJS per il mio progetto web. Ho generato metadati offline e li ho archiviati in un file metadata.js.

Dopo aver creato EntityManager, ho estratto le definizioni enum in un dizionario JS che ho usato in seguito per il menu a discesa dei binding, visualizzare le stringhe enum corrispondenti ecc.

Estrai la definizione di Enum e memorizzala nel dizionario JS

        JSON.parse(window.app.metadata).schema.enumType.forEach(function (enumType) {
var newEnumValues = [];

enumType.member.forEach(function (enumValue) {
var newEnumValue = { id: enumValue.value, name: enumValue.name };
newEnumValues.push(newEnumValue);
});

enumDictionary[enumType.name] = newEnumValues;
});

Metodo per recuperare il valore enum sulla base del nome enum e valueid

        function GetEnumDictionaryValue(enumName, enumValueId) {
var result = null;
enumDictionary[enumName].some(function (enumValue) {
if (enumValue.id == enumValueId) {
result = enumValue.name;
return;
}
});

return result;
}

Valori vincolanti a discesa Ora per i menu a discesa vincolanti, basta chiamare enumDictionary [] e archiviare il risultato in una variabile del controller. Stavo usando Angular JS, quindi ho usato sotto il codice nella pagina html

      <select ng-options="type.id as type.name for type in <VariableName>"
></select>