我正在尝试在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'。”}
和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);
}
}
答案 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)