我有一个使用代码的应用程序;在搜索部分,我必须从3个表及其相关表中收集信息,以便我查看;并且因为首先没有代码的语法来创建视图(我想是这样;如果我错了请告诉我)我使用纯SQL脚本; 在模型创建上,以防止EF创建一个与表名相同的表(VIEW_SEARCH)我做了:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Ignore<View_Search>();
}
应用程序正常工作,直到您尝试从视图中获取数据然后BANG ...
自创建数据库以来,支持'SearchContext'上下文的模型已更改。考虑使用代码优先迁移来更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)
答案 0 :(得分:1)
此错误只是说您模型文件中的内容与数据库中的内容不一致。 要使其一致,请转到程序包管理器控制台并键入Enable-Migrations,然后添加迁移yourMigrationName和Update-Database。错误应该消失。
如果要组合来自3个表的数据,只需创建一个ViewModel。
假设您有3个模型:Book,Author,BookStore,并且您希望在一个视图中包含所有信息。您创建ViewModel
public class MyViewModel
{
public Book myBook {get; set;}
public Author myAuthor {get; set;}
public BookStore myBookStore {get; set;}
}
然后在你的一体化视图的顶部添加
@model myNamespace.MyViewModel
并访问
等项目Model.Book.title
Model.Author.name
Model.BookStore.isClosed
答案 1 :(得分:0)
我实际上正在使用Entity Framework“Code First”和观点,我这样做是这样的:
1)创建一个类
[Table("view_name_on_database")]
public class ViewClassName {
// View columns mapping
public int Id {get; set;}
public string Name {get; set;}
// And a few more...
}
2)将类添加到上下文
public class ContextName : DbContext {
// Tables
public DbSet<SomeTableClassHere> ATable { get; set; }
// And other tables...
// Views
public DbSet<ViewClassName> ViewContextName { get; set; }
// This lines help me during "update-database" command
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
// Remove comments before "update-database" command and
// comment this line again after "update-database", otherwise
// you will not be able to query the view from the context.
// Ignore the creation of a table named "view_name_on_database"
modelBuilder.Ignore<ViewClassName>();
}
}