实体框架代码第一个DB错误

时间:2013-06-15 09:27:00

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

我正在尝试在c#中创建一个Web应用程序MVC。

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

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

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

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

感谢帮助我!

编辑:代码

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'。”}

DB

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

        }
    }

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:0)

您需要启用EF迁移。

使用Nuget Package Manager控制台运行,启用 - 迁移。

完整教程为Building an Initial Model & Database

Nuget控制台的命令与

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

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