0

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

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

所以我做了3个模型,模型在数据库中找到。现在我添加了另一个实体作为模型,但模型不是在 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'。”}

D B

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

        }
    }
4

2 回答 2

2

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

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

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

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

于 2013-06-16T11:25:44.037 回答
0

您需要启用 EF 迁移。

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

完整的教程是构建初始模型和数据库

Nuget 控制台中的命令类似于

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

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

于 2013-06-15T18:11:36.660 回答