2011-05-04 64 views

回答

17

这是因为您无法使用代码优先方法定义数据库视图。数据库视图是在现有表/函数之上使用SQL查询的数据库结构。你不能先用代码定义这样的结构。

如果您想查看,您必须通过在自定义初始化程序中执行CREATE VIEW SQL脚本手动创建它 - 它将类似于this answer。请注意,如果您想将实体映射到视图,这不会对您有所帮助。在这种情况下,您可能必须首先删除由EF创建的表,然后使用相同的名称创建视图(我没有尝试过,但它可以实现)。另外请注意,并非每个视图都是udpatable,因此您最有可能获得只读实体。

+0

是的,你是对的。事实上,我已经意识到,在代码中定义视图并没有太多意义。 :) – 2011-05-05 08:33:34

+1

我使用EF构建数据库时,在项目的初始化程序中实现了“删除表并添加视图”。没有多少乐趣,但确实有效。如果那样会使你迁移是一个悬而未决的问题。我正在寻找一种更清晰的方法来告诉EF Code First * not *生成特定表格。 – jlo 2012-06-07 18:15:38

+2

@Ladislav这就是为什么这个新的EF代码优先的框架是唯一可行的,如果你的应用程序没有复杂性,除了房屋数据以外没有其他任何事情。如果应用程序实际上做了什么 - 您将不得不坚持使用EDMX或您选择的其他ORM系统。 – 2012-06-19 11:23:10

12

要做一个视图你创建模型,然后在初始化器中运行SQL语句直接创建与第一行代码的上下文视图,然后在上下文中重写OnModelCreating并运行第二行的代码来忽略模型。

context.Database.ExecuteSqlCommand(Resources.<resourcename>); 

modelBuilder.Ignore<modeltype>(); 
+4

这个工作,我喜欢它,因为它消除了需要删除EF创建的表。但是应该指出的是,这种方法不能在EF模型中使用视图。 – 2012-06-19 10:20:59

+3

@StephanKeller这是正确的,最终由于EF代码优先方法的局限性,我最终不得不回到老式的EDMX。说实话,如果你的应用程序做了什么,你将无法使用EF代码优先的方法。但最终不应该那么令人惊讶,因为自动化只能走得太远。所以+1。 – 2012-06-19 11:20:55

相关问题