【问题标题】:The .mdf is not being created in App_Data.mdf 未在 App_Data 中创建
【发布时间】:2014-05-30 08:25:14
【问题描述】:

我正在 Visual Studio Ultimate 2013 中处理 C# ASP.NET Web 窗体项目,同时遵循这个 http://goo.gl/1hK73 教程(但没有做完全相同的项目)。但是,我无法在 App_Date 中创建 .mdf 文件。

我已经创建了我的实体类 DbContext,在我的一个表中添加了一个项目,向 Web.config 添加了一个 connectionString:

<add name="TestingSystem" connectionString="Data Source (LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\studenttestingsystem.mdf;Integrated Security=True" providerName="System.Data.SqlClient" />

,并在 Global.asax.cs Application_Start() 方法中初始化数据库:

Database.SetInitializer(new TestingSystemDatabaseInitializer());

我查找了一些类似的问题,但对我没有任何帮助(我已经完成或只是没有工作)。

我在解决方案资源管理器中刷新了 App_Data 文件夹并使用了显示所有文件选项,但没有任何改变。

我的 TestingSystemDatabaseInitializer:

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

namespace Student_Testing_System.Models
{
    public class TestingSystemDatabaseInitializer :     DropCreateDatabaseIfModelChanges<TestingSystemContext>
    {
        protected override void Seed(TestingSystemContext context)
        {
            var root = new Category()
            {
                CategoryId = 0,
                CategoryName = "root",
                Description = "Default category",
                ParentId = null,
                Parent = null,
            };

            context.Categories.Add(root);
        }
    }
}

上下文:

public class TestingSystemContext : DbContext
{
    public TestingSystemContext()
        : base("TestingSystem")
    {

    }

    public DbSet<Question> Questions { get; set; }
    public DbSet<Category> Categories { get; set; }
    public DbSet<Template> Templates { get; set; }
    public DbSet<Test> Tests { get; set; }
    public DbSet<StudyGroup> StudyGroups { get; set; }
}

此外,当通过 PM 中的 Update-Database 更新数据库时,出现错误:
EntityType 'IdentityUserLogin' 没有定义键。定义此 EntityType 的键。 EntityType 'IdentityUserRole' 没有定义键。定义此 EntityType 的键。

这两个类都是 EntityFramework 的一部分,并且没有 [Key] 的数据注释,所以我不知道如何解决这个问题。

身份用户登录:

public class IdentityUserLogin
{
    public IdentityUserLogin();

    public virtual string LoginProvider { get; set; }
    public virtual string ProviderKey { get; set; }
    public virtual IdentityUser User { get; set; }
    public virtual string UserId { get; set; }
}

身份用户角色:

public class IdentityUserRole
{
    public IdentityUserRole();

    public virtual IdentityRole Role { get; set; }
    public virtual string RoleId { get; set; }
    public virtual IdentityUser User { get; set; }
    public virtual string UserId { get; set; }
}

【问题讨论】:

  • 能否也添加上下文的来源?

标签: c# asp.net entity-framework webforms


【解决方案1】:

要更新数据库打开工具->库包管理器->包管理器控制台并在打开的控制台中输入

update-database

要重新启动 LocalDB 服务,请在开始/程序菜单->所有程序->Visual Studio->Visual Studio 工具下打开“VS.NET 的开发人员命令提示符”

运行以下命令:

sqllocaldb.exe stop v11.0
sqllocaldb.exe delete v11.0

之后再次执行“update-database”。

【讨论】:

  • 当我尝试 update-database 命令时,一条错误消息说我的 EntityTypes 都没有定义键。即使我在每个 ID 之前都有数据注释 [Key]。 o.O
  • 你能举个声明的例子吗?
  • [Key] public ulong CategoryId { get; set; }
  • 你不能使用无符号类型,因为没有例如数据库中可用的 uint 或 ulong 类型。
  • 好的,谢谢!但是现在我仍然对 IdentityUserLogin 和 IdentityUserRoles 有同样的错误,它们不是我声明的实体。我不确定如何在他们的情况下解决这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多