我在更改/更新模型后遇到了重建数据库的问题。我有一个数据库文件“帖子”,“线程”和“关系”内的三个表。如果我运行应用程序并发布新线程一切都很好,我可以看到线程。如果我尝试在线程中添加帖子,它会抛出一个错误,说它无法按名称“线程”查找表。如果我在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