我有一个表,在整个应用程序中由Entity使用。我有一个视图返回一个相同的列集,但实际上是一个联盟,试图解决一些不正常的规范化(应用程序很大,部分不在我手中,这部分是不可避免的)。
是否可以让实体4将一个与表格完全相同的视图视为同一类型,以便我可以使用此视图来填充相同类型的集合? This question似乎表明它在nhibernatem中是可能的,但我找不到类似于实体的东西。这将是导航属性的额外奖励,仍可用于Include(),但这不是必需的(我总是可以手动加入)。
答案 0 :(得分:0)
由于EF适用于从对象到数据库实体的映射,因此这是不可能的。您需要的是动态更改查询的数据库实体,而如果不手动更改对象上下文,则无法实现AFAIK。
答案 1 :(得分:0)
确保EF运行时不会在意,只要它可以将视图视为完全独立的表。我预见的两个可能的挑战是:
工具:我们的向导允许您在进行逆向工程时选择视图(即数据库优先)。确切地说,如果您可以首先使用“代码对现有数据库”,您可以假装该视图只是一个表,但您无法获得编写数据库创建或迁移的任何帮助。
更新:通常,您可以为视图设置存储过程映射执行更新(可在v1中从EF1或在EF6中的Code First中获得)。您也可以直接更新视图或使用off触发器(有关更多详细信息,请参阅“可更新视图”here)。如果我没记错的话,EF生成的用于检索数据库生成的值(例如,用于标识列)的SQL在某些情况下与反向触发器不兼容。另一种方法是让您的应用程序将视图视为只读,并通过实际表执行所有更新,您将映射为单独的实体。请记住,视图和原始表的内存中实体不会保持同步。
希望这有帮助!