2013-06-29 113 views
2

我有一个应用程序使用第一代码;在搜索部分,我必须从3个表格及其相关表格收集信息,所以我提出了一个观点;因为没有代码首先创建视图的语法(我认为是这样;请让我知道如果我错了)我使用纯SQL脚本; 在模型建立防止EF创建具有相同的名称表(VIEW_SEARCH)的表我做:在您尝试从视图然后BANG获取数据实体框架代码的第一和视图映射

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

任何方式应用程序工作正常...

模型后盾“SearchContext”上下文已经改变自数据库创建。考虑使用Code First Migrations来更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269

+0

试试这个:http://stackoverflow.com/questions/20862807/mapping-database-views-to-ef-5-0- code-first-w-migrations/35876571#35876571 –

回答

1

这个错误只是说你在你的模型文件中有什么与你在数据库中有什么不一致。 要使其一致,请打开包管理器控制台并键入启用迁移,然后添加 - 迁移yourMigrationName和更新数据库。错误应该消失。

如果你想组合3个表中的数据,你可以简单地创建一个ViewModel。

假设您有3个型号:Book,Author,BookStore,并且您希望在一个视图中显示所有信息。创建视图模型

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 
+0

也许我给了足够的信息;如果模型更改,则启用迁移并重新生成数据库! –

+0

以及about组合:我需要它们合并成这样:'public class SearchResult { public PublicResult() { Query = null; Total = TotalPages = 0; Page = 1; 结果=新列表(); } 公众诠释页{获得;组; } public string Query {get;组; } 公开名单结果{获得;组; } public int Total {get;组; } public int TotalPages {get;组; } }' –

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>(); 
    } 
} 
+0

读取数据时出现错误:值不能为空(不知道'Value'是什么...) – wtf512