Entity Data Model Wizard http://linearbench.com:9000/lbstest/ef.png
C# class generated http://linearbench.com:9000/lbstest/code.png
有人能告诉我哪里做错了吗?我使用实体框架6.1.3,与Npgsql 2.2.5. Posgresql数据库是在ubuntu服务器上安装的9.3.6版.
谢谢
视图的问题是实体框架很难确定它们的主键列.在sql Server中,您可以使用ISNULL()函数来欺骗EF认为该列是一个键列,但postgres中的equvilant coalesce()函数对于EF来说还不够好.我还尝试生成自动递增的行id列,使用主键连接到其他表等;没有运气这些.
但是,只要能够将我的视图查询到我的视图对象中,我只需要模拟我需要的功能就是只使用调用Database.sqlQuery并将其作为Queryable返回的函数来扩展您的上下文类.
例如:
假设数据库中的视图“foo”,列id,bar,baz.您可以编写自己的POCO来保存视图数据
public class foo { public int id { get; set; } public string bar { get; set; } public string baz { get; set; } }
然后使用像这样的部分类定义扩展您的上下文类
public partial class FooContext : DbContext { public IQueryable<foo> foo => this.Database.sqlQuery<foo>( "select * from foo" ).AsQueryable(); }
然后,您可以从上下文中查询它,就像任何其他表一样
context.foo.where( x => id > 100 ).toList(); //etc,etc
您无法进行插入或使用标准DbSet通常附带的任何额外功能,但View通常用作只读查询(除非您使用一些特殊的插入触发器)…
但这会给你一个基本调用,它将查询整个视图,并且它没有命中数据库,因为它的左边是可查询的,所以你可以自由地调用它上面的任何其他LINQ扩展,比如Where将它过滤到你想要的结果.
我使用npgsql lib从sql server迁移到postgres sql,这个修复允许我的视图工作,而不必对我的程序代码库进行任何更改,就像没有任何改变一样,尽管edmx不会生成由于缺少(可辨别的)主键,我的视图对象.
希望这可以帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。