【问题标题】:Entity Framework Code First DB error实体框架代码优先数据库错误
【发布时间】:2013-06-16 19:39:49
【问题描述】:

我正在尝试用 c# 制作一个 Web 应用程序 MVC4。

我使用的数据库与最初为用户创建的数据库(身份验证)相同(更容易处理连接字符串)。

所以我做了 3 个模型,模型在 DB 中找到。现在我添加了另一个实体作为模型,但模型不是在 mdf 文件中创建的。

如何从代码创建它或重建数据库,或者...

目前,除了处理我的最新实体(名为“ItemsToBuy”)的控制器之外,一切正常,因为它确实不存在于数据库中

谢谢你的帮助!

编辑:代码

namespace MvcShop.Models
{
    public class ItemsToBuy
    {

        public int ItemsToBuyId {get; set;}

        public Item Item { get; set; }

        public int NumberItems { get; set; }
        public string AddedBy { get; set; }
        public DateTime AddedDate { get; set; }

        public int ItemId { get; set; }

    }
}

以及产生异常的方法:

var itemstobuys = db.ItemsToBuy.Include(i => i.Item);
return View(itemstobuy.ToList());

有那个异常(InnerException):

{"无效的对象名称'dbo.ItemsToBuys'。"}

还有 DBCONtext 类:

namespace MvcShop.Models
{
    public class ShopEntities : DbContext
    {
        public DbSet<Item> Item { get; set; }
        public DbSet<ItemShop> ItemShop { get; set; }
        public DbSet<ItemsToBuy> ItemsToBuy { get; set; }
        public DbSet<Shop> Shop { get; set; }
    }
}

并根据需要在 global.asax 中:

public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            AuthConfig.RegisterAuth();

            Database.SetInitializer<ShopEntities>(null);

        }
    }

【问题讨论】:

  • 你需要添加你的代码
  • @devdigital:谢谢。我进行了编辑,但我认为它不会增加对问题的理解,这对我来说很清楚,但是解决方案 hmmmmmmm :-/ ;-)
  • 您是否在 mdf 文件上完成了右键并“刷新”?你能分享你的 DbContext 类和你的数据库初始化代码吗?
  • @Vic 你好,谢谢。我再次编辑了最初的帖子:-)
  • 谢谢,仍然缺少您的数据库初始化代码。最有可能放在 global.asax

标签: c# visual-studio-2010 entity-framework entity-framework-4 entity


【解决方案1】:

如果数据库中不存在,默认初始化程序(您正在使用的初始化程序)只会创建数据库。您可以使用另一个 EF 内置初始化程序:

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<ShopEntities>());

这样,当您第一次访问数据库并且模型已更改时,初始化程序将删除数据库并根据模型的更改再次创建一个新数据库。如果模型没有变化,则 DB 保持原样。

在运行应用程序之前,请确保数据库中没有现有的打开连接。否则将返回一个错误,告知 EF 无法删除数据库。

【讨论】:

    【解决方案2】:

    您需要启用 EF 迁移。

    使用 Nuget 包管理器控制台运行,Enable-Migrations。

    完整教程是Building an Initial Model & Database

    来自 Nuget 控制台的命令类似于

    Enable-Migrations -ContextTypeName Table.Models.Data.DatabaseContext -EnableAutomaticMigrations -Force) 
    

    然后更新数据库(Update-Database)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      • 1970-01-01
      相关资源
      最近更新 更多