Sql 实体框架代码优先:查询没有主键的视图

Sql 实体框架代码优先:查询没有主键的视图,sql,oracle,entity-framework,view,ef-code-first,Sql,Oracle,Entity Framework,View,Ef Code First,我们的客户已经允许访问未定义主键的视图。我知道实体框架需要表标识的主键 但对于没有主键的视图,仍然可以进行查询 我试图找到实体框架,但总是出现错误,如: 错误::EntityType“ViewWeight”未定义键。定义此EntityType的键 我知道键对于表很重要,但是对于只读取值的视图来说,有没有什么方法可以在不修改视图本身的情况下读取值。在实体框架中,不可能有没有主键的实体 尝试从视图中获取可能的唯一键,组合列。。。创建唯一的主键 如果不可能,则有一个变通方法,如果只是一个可查询的视图,

我们的客户已经允许访问未定义主键的视图。我知道实体框架需要表标识的主键

但对于没有主键的视图,仍然可以进行查询

我试图找到实体框架,但总是出现错误,如:

错误::EntityType“ViewWeight”未定义键。定义此EntityType的键


我知道键对于表很重要,但是对于只读取值的视图来说,有没有什么方法可以在不修改视图本身的情况下读取值。

在实体框架中,不可能有没有主键的实体

尝试从视图中获取可能的唯一键,组合列。。。创建唯一的主键

如果不可能,则有一个变通方法,如果只是一个可查询的视图,则不需要对检索到的值执行其他操作,如删除或更新。修改视图以添加
NEWID()
,它将为每行生成唯一的GUID ID,并将此新列用作实体的主键

CREATE VIEW FooView AS
    SELECT SELECT NEWID() AS ID,
           COLUMN_A,
           COLUMN_B
     .....
问题是,如果每次重复相同的查询,同一行将获得不同的ID

已更新

如果不能修改视图,则可以将实体与原始Sql一起使用,将原始Sql创建为

List<MyView> myViewItems = context.MyView.SqlQuery("SELECT NEWID() AS ID, MyView.* FROM MyView").ToList();
并将新属性配置为主键


但是要小心,因为这种代码没有编译检查。

我创建了包含主键的视图。确保视图中的所有字段都是特定的数据类型:

数字(9)而不是数字,使用CAST获得所需的类型

然后添加禁用的主键约束。除了被实体框架识别为密钥之外,它不会做任何事情

alter view emp_view add constraint vemp_pk primary key (empno) disable

可能的重复和查找也感谢您的回复,但正如我所说的,我没有权限更改视图,因此我正在寻找某种黑客或原始sql查询,这可能会起到作用:)var result=entityContext.Database.SqlQuery(“SELECT NEWID(),MyView.*FROM MyView”).ToList();与MyEntity上未定义键的问题相同,可能是我应该使用非实体类型,如Tupley。是否将主键添加到模型中并设置为主键?奇怪的是,我得到了ORA-00955:名称已被现有对象使用,此外,我正在使用Oracle数据库是newid在Oracle中工作吗?我也不确定是的,例如
选择SYS_GUID()作为ID,
您必须在模型中将列重命名为相同的名称。
alter view emp_view add constraint vemp_pk primary key (empno) disable