【发布时间】:2012-01-20 09:52:57
【问题描述】:
我应该如何在 EF CodeFirst 中使用流畅的 API 映射我的非表对象,例如 Views、StoredProcedure 等。
【问题讨论】:
标签: c# .net entity-framework ef-code-first
我应该如何在 EF CodeFirst 中使用流畅的 API 映射我的非表对象,例如 Views、StoredProcedure 等。
【问题讨论】:
标签: c# .net entity-framework ef-code-first
首先在代码中不支持映射到存储过程和 vew。这些是 Julia Lerman 的 Programming Entity Framework 中的一些解决方法:Code First。
映射到可更新视图
modelBuilder.Entity<MyEntity>().ToTable("MY_VIEW")
视图列名称应与实体字段名称相同,并且您 可以使用实体框架插入、更新和删除数据 以及选择它。 只需对 Code First 撒谎并告诉 View 作为表。
使用视图填充对象
var myEntity = dbContext.MyEntity.SqlQuery("SELECT * FROM dbo.MY_VIEW")
视图列名称应该与实体字段名称相同,并且您仍然可以获得 DbContext 功能,例如更改跟踪、延迟加载。
使用视图填充非模型对象
var myNonModel = dbContext.Database.SqlQuery("SELECT * FROM dbo.MY_VIEW")
视图列名称应与实体字段名称相同。
使用存储过程
使用视图的相同技术。
var myEntity = dbContext.MyEntity.SqlQuery("dbo.StoredProcedureName @p0 @p1", myParam1, myParam2)
【讨论】:
代码首先不支持存储过程的映射。视图的映射必须被破解——你会假装视图是一个表并希望你的应用程序能够工作。 Fluent-api 旨在仅支持代码优先方案 = 您的应用程序将创建一个数据库。因此它不支持任何具有数据库级别逻辑的数据库功能,例如存储过程、视图或函数。
【讨论】: