J'ai un problème avec la reconstruction de DB après que le modèle a été modifié/mis à jour. J'ai trois table dans un fichier db "Posts", "Threads" et "Relations". Si je lance l'application et publie un nouveau fil, tout semble bien, je peux voir le fil. Si j'essaie d'ajouter un message sur le thread, il génère une erreur indiquant qu'il ne trouve pas de table nommée "Thread". Si je coche "Database Explorer" dans Visual Web Developer je ne peux voir que la table "Posts" qui est maladroit. Maintenant, j'ai lu quelque part que db n'est pas créé avant la première utilisation du modèle (économie?).Erreur d'application avec SQL CE 4.0 et ASP.NET MVC 3
Ma configuration des modèles est:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using System.Data.Entity.Database;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity.ModelConfiguration;
namespace aspnet_forum.Models
{
public class Threads
{
public int ID { get; set; }
[Required]
public string Name { get; set; }
[Required]
public string Author { get; set; }
public DateTime Date { get; set; }
public string Slug { get; set; }
}
public class ThreadsDBContext : DbContext
{
public DbSet<Threads> Threads { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
DbDatabase.SetInitializer(new MyThreadsDBContextInitializer());
base.OnModelCreating(modelBuilder);
}
}
public class MyThreadsDBContextInitializer : DropCreateDatabaseIfModelChanges<ThreadsDBContext>
{
protected override void Seed(ThreadsDBContext dbContext)
{
// seed data
base.Seed(dbContext);
}
}
}
J'ai aussi utilisé "DropCreateDatabaseAlways" résultant même erreur. Le modèle Posts est le même que Thread avec un champ supplémentaire "text" et un nom Posts si pertinent.
modèle de relations:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity;
using System.Data.Entity.Database;
using System.Data.Entity.ModelConfiguration;
namespace aspnet_forum.Models
{
public class Relations
{
public int ID { get; set; }
[ForeignKey("Threads")]
public int ThreadID { get; set; }
//public virtual Threads Thread { get; set; }
[ForeignKey("Posts")]
public int PostID { get; set; }
//public virtual Posts Post { get; set; }
}
public class RelationsDBContext : DbContext
{
public DbSet<Relations> Relations { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
DbDatabase.SetInitializer(new MyRelationsDBContextInitializer());
base.OnModelCreating(modelBuilder);
}
}
public class MyRelationsDBContextInitializer : DropCreateDatabaseIfModelChanges<RelationsDBContext>
{
protected override void Seed(RelationsDBContext dbContext)
{
// seed data
base.Seed(dbContext);
}
}
}
Mon web.config est:
<connectionStrings>
<add name="ThreadsDBContext"
connectionString="Data Source=|DataDirectory|Forum.sdf"
providerName="System.Data.SqlServerCe.4.0"/>
<add name="PostsDBContext"
connectionString="Data Source=|DataDirectory|Forum.sdf"
providerName="System.Data.SqlServerCe.4.0"/>
<add name="RelationsDBContext"
connectionString="Data Source=|DataDirectory|Forum.sdf"
providerName="System.Data.SqlServerCe.4.0"/>
</connectionStrings>
J'ai essayé et créé toutes les tables et les relations à la main et tout cela fonctionne comme prévu, je ne sais juste pas si les relations fonctionneront comme prévu.
Essayer d'établir une relation M2M entre les threads, les postes et les relations.
PS: il existe une table "EdmMetadata".
Dans quelle classe modèle dois-je mettre ceci ou je fais nouvelle classe pour cela? – daniyel
Ce devrait être une classe séparée. Je mettrai à jour ma réponse pour le démontrer. –
Je l'ai fonctionné maintenant. Merci de votre aide. Il ne reste plus que la récupération de tous les messages relatifs à l'ID de fil ou à la limace. Je l'ai eu comme ceci: dbForum.Posts.Include (t => t.Thread) .GroupBy (t => t.Slug == threadSlug) mais je ne sais pas comment aller chercher ... – daniyel