我最近开始使用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)。
我希望有人能帮助我理解这一点; - )
祝你好运
答案 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)
{
}