我是使用實體框架以及使用ASP.NET MVC的新手。我已經能夠在ASP.NET MVC網站上完成一些教程,並認爲我將基於MVC音樂商店應用程序開始我自己的項目。使用示例數據爲實體框架種子數據庫不會創建數據庫
我不能告訴我出錯的地方(它對我來說看起來都一樣),但出於某種原因,我的種子數據不會創建數據庫。
項目類:
namespace MySite.Models
{
public class Item
{
public int Id { get; set; }
public string Name { get; set; }
}
}
標籤類:
namespace MySite.Models
{
public class Tag
{
public int Id { get; set; }
public string Name { get; set; }
}
}
ItemTag類:
namespace MySite.Models
{
public class ItemTag
{
public int Id { get; set; }
public int ItemId { get; set; }
public int TagId { get; set; }
}
}
MySiteEntities類:
namespace MySite.Models
{
public class MySiteEntities : DbContext
{
public DbSet<Item> Items { get; set; }
public DbSet<Tag> Tags { get; set; }
public DbSet<ItemTag> ItemTags { get; set; }
}
}
的Global.asax類:
namespace MySite
{
public class MvcApplication : System.Web.HttpApplication
{
...
protected void Application_Start()
{
System.Data.Entity.Database.SetInitializer(new MySite.Models.SampleData());
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
}
}
Web.config文件:
<configuration>
...
<connectionStrings>
<add name="MySiteEntities"
connectionString="Data Source=|DataDirectory|MySite.sdf"
providerName="System.Data.SqlServerCe.4.0" />
</connectionStrings>
</configuration>
的sampleData類:
namespace MySite.Models
{
public class SampleData : DropCreateDatabaseIfModelChanges<MySiteEntities>
{
protected override void Seed(MySiteEntities context)
{
new List<Item>
{
new Item { Id = 1, Name = "Bob Jones" },
new Item { Id = 2, Name = "George Smith" },
new Item { Id = 3, Name = "Boys and Girls" },
new Item { Id = 4, Name = "The President's Hair" },
new Item { Id = 5, Name = "Invaders From Mars" },
new Item { Id = 6, Name = "Tank Shooter" },
new Item { Id = 7, Name = "Stew's Blog" },
new Item { Id = 8, Name = "Social Mania" }
}.ForEach(i => context.Items.Add(i));
new List<Tag>
{
new Tag { Id = 1, Name = "Author" },
new Tag { Id = 2, Name = "Movie" },
new Tag { Id = 3, Name = "Video Game" },
new Tag { Id = 4, Name = "Website" }
}.ForEach(t => context.Tags.Add(t));
new List<ItemTag>
{
new ItemTag { Id = 1, ItemId = 1, TagId = 1 },
new ItemTag { Id = 2, ItemId = 2, TagId = 1 },
new ItemTag { Id = 3, ItemId = 3, TagId = 2 },
new ItemTag { Id = 4, ItemId = 4, TagId = 2 },
new ItemTag { Id = 5, ItemId = 5, TagId = 3 },
new ItemTag { Id = 6, ItemId = 6, TagId = 3 },
new ItemTag { Id = 7, ItemId = 7, TagId = 4 },
new ItemTag { Id = 8, ItemId = 8, TagId = 4 }
}.ForEach(x => context.ItemTags.Add(x));
}
}
}
這幾乎是一切。我確實在一點上刪除了數據庫文件。當我構建解決方案時不應該再次創建它嗎?
有趣。這是有道理的,但它是否仍然等待頁面在瀏覽器中刷新以創建數據庫?我顯然對這種行爲感到困惑。 –
正確。在調用使用您的DbContext的操作方法之前,數據庫不會被更改。在你的例子中,一個具有以下「var allItems = mySiteEntities.Item.ToList();返回View(allItems);」的動作方法「然後在您的瀏覽器中查看將重新創建數據庫 – MVCKarl