我已将实体映射到数据库视图(用于查询数据)以及表(用于插入、更新数据)。
要将实体映射到数据库视图,我使用以下代码(来自 EF 5.0 文档):
modelBuilder
.Entity<Blog>()
.ToTable("Blogs")
.ToView("BlogsView");
Run Code Online (Sandbox Code Playgroud)
在数据库视图中,我有由数据库计算的附加列(它们不存在于表中)。我在每个选择查询中都需要这些附加列,但在保存和更新时需要忽略它们。
数据[NotMapped]注释不是解决方案,因为它忽略所有命令(选择、更新等)的属性。但是,当我省略[NotMapped]数据注释时,EF 会在插入时引发错误,因为 EF 尝试将值插入到表中不存在的列中。
该[DatabaseGenerated(DatabaseGeneratedOption.Computed)]属性也不是解决方案,因为在 SQL 插入语句中,EF 生成一个从表而不是数据库视图中选择列的查询。
是否有任何解决方案可以使用 Fluent API 实现此目的,而无需将不同的实体单独映射到视图(带有附加列)和表(没有附加列)?