Alors, je crée un service mobile azure, télécharge un projet et l’exécute. Après le premier lancement, je vois de nouvelles tables dans la firebase database: TodoItems
(avec 2 éléments) et _MigrationHistory
. Jusqu’ici tout va bien.
Maintenant, j’aimerais append une table supplémentaire.
MyModel:EntityData { public ssortingng MyData { get; set; }
nouveau modèle MyModel:EntityData { public ssortingng MyData { get; set; }
MyModel:EntityData { public ssortingng MyData { get; set; }
MyModelController:TableController
qui est une copie de TodoItemController, TodoItem
étant remplacé par MyModel
public DbSet MyModels { get; set; }
ajouté public DbSet MyModels { get; set; }
public DbSet MyModels { get; set; }
public DbSet MyModels { get; set; }
à MyProjectContext.cs context.Set().Add(new MyModel{MyData= "test"});
Est-ce que j’oublie quelque chose?
Après avoir supprimé toutes les tables et republié et exécuté mon application mobile, j’obtiens une exception MobileServiceInvalidOperationException et mes tables sont vides (même si TodoItems
est vide).
EDIT : Je ne sais pas où est le cœur du problème. Si append une ligne à l’application mobile
private IMobileServiceTable myItemsTable = App.MobileService.GetTable();
Cela lancerait InvalidOperationException. Mais la table MyModels
existe dans une firebase database, je peux la voir via le gestionnaire de bases de données …
EDIT2 :
TodoItems
service mobile, lancez l’application et encore une fois, je vois 2 tables: TodoItems
(avec 2 éléments) et _MigrationHistory
. public DbSet MyModels { get; set; }
public DbSet MyModels { get; set; }
public DbSet MyModels { get; set; }
à MyProjectContext.cs, a supprimé toutes les tables de la firebase database, lance l’application et maintenant je vois 3 tables: MyModels
, TodoItems
(avec 2 éléments) et _MigrationHistory
. context.Set().Add(new MyModel{MyData= "test"});
ligne context.Set().Add(new MyModel{MyData= "test"});
– après ce moment, l’ensemencement a mal tourné: je vois trois tableaux MyModels
, TodoItems
et _MigrationHistory
, mais TodoItems
est vide. Le problème était context.Set
ligne context.Set
. J’ai oublié d’initialiser Id
: je pensais que ce serait auto-incrémenté.
La ligne fixe correspond au context.Set
EDIT1: juste un autre problème que j’ai rencontré: s’il y a une exception dans la ligne de l’application var myTable = MobileService.GetTable
, assurez-vous que vous avez ajouté le champ Id
à votre modèle.
C’est un peu plus délicat que cela ne devrait être, mais la raison de l’erreur est que l’initialiseur ne voit pas que la table MyModel n’est pas là, mais que le modèle TodoItem n’a pas changé.
La solution de contournement la plus simple consiste à append à votre DbSet MyModel un contexte todoitem existant au lieu d’append un nouveau MyModelContext pour qu’il ressemble à ceci:
public DbSet TodoItems { get; set; } public DbSet MyModels { get; set; }
Ensuite, vous pouvez également n’avoir qu’un initialiseur de firebase database, par exemple, ressemblant à ceci:
protected override void Seed(henrikntest13Context context) { List todoItems = new List { new TodoItem { Id = "1", Text = "First item", Complete = false }, new TodoItem { Id = "2", Text = "Second item", Complete = false }, }; foreach (TodoItem todoItem in todoItems) { context.Set ().Add(todoItem); } List myModels = new List { new MyModel { Id = "1", MyData = "First Item"}, new MyModel { Id = "2", MyData = "Second Item"}, }; foreach (MyModel model in myModels) { context.Set ().Add(model); } base.Seed(context); }
Lors de la première exécution, vous devrez peut-être utiliser ClearDatabaseSchemaAlways comme classe de base pour forcer le modèle à être mis à jour avec les deux entités:
public class MyInitializer : ClearDatabaseSchemaAlways
Mais à partir de ce moment-là, vous pourrez simplement utiliser à nouveau ClearDatabaseSchemaAIfModelChanges.
J’espère que cela t’aides!
Henrik