gpt4 book ai didi

asp.net-mvc-3 - 使用示例数据为 Entity Framework 提供种子数据库不会创建数据库

转载 作者:行者123 更新时间:2023-12-02 07:44:08 25 4
gpt4 key购买 nike

我对使用 Entity Framework 和 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>

样本数据类:

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));
}
}
}

这就是一切。我确实曾经删除过数据库文件。它不应该在我构建解决方案时再次创建吗?

最佳答案

原因:这是因为您正在使用“DropCreateDatabaseIfModelChanges”。

因为它表明如果你的模型没有改变那么它不会创建数据库(或者如果数据库已经存在那么它不会添加你填充的数据)。

解决方案:您想改用“CreateDatabaseIfNotExists”。

备选方案:如果您的数据库已经创建并且您只想添加初始数据,则使用“DropCreateDatabaseAlways”但是您必须意识到这将从每次重新启动应用程序时从头开始。因此,只有当您的数据库已经创建并且您不想更改模型(并且您不关心丢失数据库中已有的数据)然后将其更改为其他两个选项之一时才使用它。

关于asp.net-mvc-3 - 使用示例数据为 Entity Framework 提供种子数据库不会创建数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8313825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com