我在更改/更新模型後遇到了重建數據庫的問題。我有一個數據庫文件「帖子」,「線程」和「關係」內的三個表。如果我運行應用程序併發布新線程一切都很好,我可以看到線程。如果我嘗試在線程中添加帖子,它會拋出一個錯誤,說它無法按名稱「線程」查找表。如果我在Visual Web Developer中檢查「數據庫資源管理器」,我只能看到表格「Posts」,這很尷尬。現在我讀了一些地方,直到首次使用model(save?)才創建db。SQL CE 4.0和ASP.NET MVC中的應用程序錯誤3
我的模式設置爲:
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」 導致同樣的錯誤。帖子模型與Thread相同,其中有相關的字段「text」和Posts名稱。
關係模型:
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 2012-02-14 11:10:48
它應該是一個單獨的課程。我會更新我的答案來證明這一點。 – 2012-02-14 11:16:39
我現在工作了。謝謝你的幫助。現在唯一剩下的就是獲取與線程ID或Slug相關的所有帖子。我得到它是這樣的:dbForum.Posts.Include(t => t.Thread).GroupBy(t => t.Slug == threadSlug),但我不知道如何獲取此... – daniyel 2012-02-14 12:47:05