【问题标题】:Mvc Music Store (MVC3) : SampleData won't populate DBMvc 音乐商店 (MVC3):SampleData 不会填充数据库
【发布时间】:2016-10-25 01:53:49
【问题描述】:

这是我真正的大问题:当我运行程序时,它发现没有流派):Check the picture

该示例使用此代码作为连接字符串:

 <connectionStrings>
    <add name="MusicStoreEntities"
    connectionString="Data Source=|DataDirectory|MvcMusicStore.sdf"
    providerName="System.Data.SqlServerCe.4.0"/>
 </connectionStrings>

您可能会注意到,它使用的是 SqlServerCe4.0,但我改为更改它以使用 SqlClient(我已经安装了):

<connectionStrings>
     <add 
            name="MusicStoreEntities"
             connectionString="Data Source=(localdb)\v11.0;
             Integrated Security=true;AttachDbFileName=|DataDirectory|MvcMusicStore.mdf"
             providerName="System.Data.SqlClient" 
      />
</connectionStrings>

示例数据文件:

using System.Collections.Generic;
using System.Linq;
using System.Data.Entity;

namespace MvcMusicStore.Models
{
    public class SampleData : DropCreateDatabaseIfModelChanges<MusicStoreEntities>
    {
        protected override void Seed(MusicStoreEntities context)
        {
            var genres = new List<Genre>
            {
                //Perfec genres
            };

            var artists = new List<Artist>
            {
                //Cool Artists list
            };

            new List<Album>
            {
                //Awesome albums
            }.ForEach(a => context.Albums.Add(a));

        }
    }
}

上下文类:

using System.Data.Entity;

namespace MvcMusicStore.Models
{
    public class MusicStoreEntities : DbContext
    {
        public DbSet<Album> Albums { get; set; }
        public DbSet<Genre> Genres { get; set; }
    }
}

应用启动类:

using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace MvcMusicStore
{
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            System.Data.Entity.Database.SetInitializer(new MvcMusicStore.Models.SampleData());

            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

        }
    }
}

关于如何解决这个问题的任何想法?我会感谢你的帮助。

编辑 1. 添加 IdentityModels.cs

IdentityModels.cs

 public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext()
            : base("DefaultConnection", throwIfV1Schema: false)
        {


    }

        public static ApplicationDbContext Create()
        {

            return new ApplicationDbContext();
        }
    }

【问题讨论】:

  • 它有任何数据吗?
  • @Rahul 如果您谈论的是 SampleData 类,则该文件包含艺术家、专辑和流派。但是,我不知道为什么不填充数据库。
  • @Cempoalxóchitl 你有你的数据库吗?也许你的例子中的连接字符串无效。
  • 嗨,@ShawnYan。我如何知道是否存在数据库?而且,是的,我也在想同样的事情,我认为我的 ConnectionString 有问题。编辑:天哪,我记得我删除了 App_Data 文件夹中的一些文件,认为它们会自动生成。我想我遇到了麻烦并决定删除那里的数据库。
  • @Cempoalxóchitl 您需要检查它是否存在于您的 App_Data 文件夹或您的 sql 服务器提供程序中。尝试使用此连接字符串:&lt;connectionStrings&gt; &lt;add name="MusicStoreEntities" connectionString="Data Source=(local);Initial Catalog=Db_Name;Integrated Security=True" providerName="System.Data.SqlClient"/&gt; &lt;/connectionStrings&gt;

标签: c# asp.net asp.net-mvc asp.net-mvc-3


【解决方案1】:

尝试将您的上下文类更改为这样的:

using System.Data.Entity;

namespace MvcMusicStore.Models
{
    public class MusicStoreEntities : DbContext
    {
        public MusicStoreEntities()
            : base("MusicStoreEntities")
        {

        }
        public DbSet<Album> Albums { get; set; }
        public DbSet<Genre> Genres { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Album>().ToTable("Album");
            base.OnModelCreating(modelBuilder);
            modelBuilder.Entity<Genre>().ToTable("Product");
            base.OnModelCreating(modelBuilder);
        }

        public static MusicStoreEntities Create()
        {
            return new MusicStoreEntities();
        }
    }
}

OnModelCreating 在数据库中创建表。

【讨论】:

  • 我应该从 Configuration.cs 中删除内容吗?
  • 不,你不需要。 Configuration.cs 允许你做种子数据,与 DbContext 无关。 :-)
  • 好的。我按照你告诉我的做了,但我仍然在.ForEach(a =&gt; context.Albums.Add(a)); 中遇到同样的错误
  • 我编辑了我的问题并添加了 IdentityModels.cs ...检查一下
  • 好的。在 IdentityModels.cs 中隐藏整个 ApplicationDbContext 类并再次调试。
【解决方案2】:

我复制了示例数据类中的代码,并将其放入在启用迁移期间创建的配置文件中。然后我运行 ****enable-migration -force**** 代码,然后在包管理器控制台中运行 update-database。此外,我在方法的末尾添加了 context.savechange() 。我的数据库中填充了上述数据。 enter image description here

【讨论】:

  • 请编辑您的帖子,使图片链接的文字表明图片的性质/相关性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-04
  • 2011-05-20
相关资源
最近更新 更多