错误实体框架数据库已更改

时间:2013-04-23 19:30:33

标签: entity-framework ado.net entity-framework-5

我最近开始使用ASP.NET MVC和实体框架。

使用现有数据库,我尝试将我的类映射到数据库表。没有成功。

让我向您展示我的数据库表:

- >的分类 - > Id(PK) - >标题 - >描述

- >的产品 - > Id(PK) - >名称 - >描述 - >价钱 - >类别(FK - > CategoryTree)

- >的 CategoriyTree - > Id(PK) - > ParentCategory(FK - >类别) - > ChildCategory(FK - >类别)

现在,我的实体框架类:

class Products
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public decimal? Price { get; set; }
    public virtual ICollection<CategoryTree> Category { get; set; }
}

class Categories
{
    public int categoriesId { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
}

class CategoryTree
{
    public int Id { get; set; }
    public virtual ICollection<Categories> ParentCategory { get; set; }
    public virtual ICollection<Categories> ChildCategory { get; set; }
}

class EFDbContext : DbContext
{
    public DbSet<Products> Products { get; set; }
    public DbSet<Categories> Categories { get; set; }
    public DbSet<CategoryTree> CategoryTree { get; set; }
}

如果我启动应用程序,编译器会发出以下错误消息警告: 自创建数据库以来,支持'EFDbContext'上下文的模型已更改。考虑使用Code First Migrations来更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。

我希望有人能帮助我理解这一点; - )

祝你好运

3 个答案:

答案 0 :(得分:2)

在Global.asax.cs的Application_Start()方法中,添加以下行:

Database.SetInitializer<EFDbContext>(null);

这将阻止Entity Framework在创建数据库后检查模型的更改。

答案 1 :(得分:1)

对于现有数据库,我建议使用EF power tool来逆向工程以生成POCO类。

答案 2 :(得分:1)

我可以从数据库中的上述信息标识Categories.Id和模型中的Categories.categoriesId看到唯一的区别(假设没有拼写错误)。

同时检查列的可为空性,例如Product.Price在模型中可以为空,在db中是这样吗?

我是否还可以建议,使用与模型不同的名称生成一个新数据库,并与现有数据库进行比较。 db名称在连接字符串中指定,因此向DbContext类添加构造函数并传递连接字符串,

internal class EFDbContext : DbContext
{
    public EFDbContext(string connectionString) : base(connectionString)
    {

    }