3

我有一个首先使用代码的应用程序;在搜索部分,我必须从 3 个表及其相关表中收集信息,所以我做了一个视图;并且由于没有代码首先创建视图的语法(我认为是这样;如果我错了请告诉我)我使用了纯 SQL 脚本;在创建模型以防止 EF 创建与表 (VIEW_SEARCH) 同名的表时,我做了:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Ignore<View_Search>();
    }

任何方式应用程序都可以正常工作,直到您尝试从视图中获取数据然后 BANG...

自创建数据库以来,支持“SearchContext”上下文的模型已更改。考虑使用 Code First 迁移来更新数据库 ( http://go.microsoft.com/fwlink/?LinkId=238269 )

4

2 回答 2

1

此错误只是表示您的模型文件中的内容与您的数据库中的内容不一致。要使其保持一致,请转到包管理器控制台并键入 Enable-Migrations,然后添加-Migration 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
于 2013-06-29T20:20:25.330 回答
0

我实际上正在使用实体框架“代码优先”和视图,我这样做的方式是这样的:

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>();
    }
}
于 2016-03-08T19:53:45.743 回答