У меня проблема с восстановлением БД после того, как Модель была изменена / обновлена.У меня есть три таблицы внутри одного файла БД "Сообщения", "Темы" и "Отношения".Если я запускаю приложение и выкладываю новую ветку, все выглядит нормально, я вижу ветку.Если я пытаюсь добавить сообщение в ветку, он выдает ошибку о том, что не может найти таблицу с именем «Тема».Если я проверю «Database Explorer» в Visual Web Developer, я вижу только таблицу «Posts», что неудобно.Теперь я где-то читал, что БД не создается до первого использования модели (сохранение?).
Мои настройки моделей:
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);
}
}
}
Я также использовал «DropCreateDatabaseAlways», что привело к той же ошибке.Модель сообщений аналогична теме с дополнительным полем «текст» и именем сообщения, где это уместно.
Модель отношений:
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);
}
}
}
Мой Web.Config:
<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>
Я попробовал и создал все таблицы и отношения вручную, и все это работает, как и ожидалось. Я просто не знаю, будут ли отношения работать так, как ожидалось.
Попытка установить отношение M2M между таблицами Threads, Posts и Relations.
PS: есть таблица "EdmMetadata".