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

Tho*_*ker 1 sql oracle entity-framework view ef-code-first

我们的客户可以访问没有定义主键的视图.我知道实体框架需要一个主键来表识别.

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

我试图找到但总是实体框架给出错误说:

错误:: EntityType'ViewWeight'没有定义键.定义此EntityType的键.

我理解密钥对于表很重要,但对于只是为了读取的视图,有任何黑客或方法来读取值而不修改视图本身.

Mar*_*als 5

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

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

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

CREATE VIEW FooView AS
    SELECT SELECT SYS_GUID() AS ID,
           COLUMN_A,
           COLUMN_B
     .....
Run Code Online (Sandbox Code Playgroud)

问题是,如果每次为同一行获取不同的ID时重复相同的查询.

更新

如果您无法修改视图,可以将Entity与原始Sql一起使用,请将原始sql创建为

List<MyView> myViewItems = context.MyView.SqlQuery("SELECT SYS_GUID() AS ID, MyView.* FROM MyView").ToList();
Run Code Online (Sandbox Code Playgroud)

在你的模特中添加

public Guid ID { get; set; }
Run Code Online (Sandbox Code Playgroud)

并将新属性配置为主键.

但要小心,因为没有使用这种代码进行编译检查.