モデルが変更/更新された後でdbの再構築に問題があります。私は1つのDBファイル "ポスト"、 "スレッド"と "関係"の中に3つのテーブルを持っています。私はアプリを実行し、新しいスレッドをすべてポストすると、私はスレッドを見ることができます。スレッドに投稿を追加しようとすると、名前の「スレッド」でテーブルを見つけることができないというエラーがスローされます。私がVisual Web Developerで "データベースエクスプローラ"をチェックすると、テーブル "Posts"しか見ることができません。今では、モデルの最初の使用(保存?)までdbが作成されていないところを読んでいます。SQL CE 4.0とASP.NET MVC 3でアプリケーションエラーが発生しました
私のモデルのセットアップは次のとおりです。私も同じエラーを得られた "DropCreateDatabaseAlways" を使用
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);
}
}
}
。投稿モデルはスレッドと同じで、追加のフィールド "text"と関連する投稿名が付いています。
関係モデル:
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関係を確立しようとしています。
PS: "EdmMetadata"テーブルがあります。
たモデルクラスでは:
今、あなたはまた、唯一の接続文字列を必要ですか? – daniyel
これは別のクラスである必要があります。私はこれを実証するために私の答えを更新します。 –
私はそれが今働いている。ご協力いただきありがとうございます。現在残っているのは、スレッドIDまたはスラッグに関連するすべての投稿を取得することだけです。 dbForum.Posts.Include(t => t.Thread).GroupBy(t => t.Slug == threadSlug)しかし、私はこれをフェッチする方法を知らない... – daniyel