Entity Framework 代码优先:查询没有主键的视图
Entity Framework code-first: querying a view with no primary key
我们的客户已授予访问未定义主键的视图的权限。我知道 Entity Framework 需要一个主键供 table 识别。
但是对于没有主键的view还是可以查询的
我试图找到但总是 Entity Framework 给出错误提示:
Error: : EntityType 'ViewWeight' has no key defined. Define the key for this EntityType.
我知道键对 table 很重要,但对于仅供阅读的视图,是否有任何技巧或方法可以在不修改视图本身的情况下读取值。
在 Entity Framework 中不可能有没有主键的实体。
尝试从视图中获取可能的唯一键,组合列,...以创建唯一的主键。
如果不可能,则有一个解决方法,如果只是一个可查询的视图,则不需要对检索到的值执行其他操作,例如删除或更新。修改视图以添加 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();
在您的模型中添加
public Guid ID { get; set; }
并配置新的属性为主键。
但是要小心,因为这种代码没有编译检查。
我创建了包含主键的视图。确保视图中的所有字段都是特定数据类型:
Number(9) 而不是 Number,使用 CAST 获取您想要的类型
然后添加禁用的主键约束。除了被 entity framework 识别为密钥
外,它不会做任何事情
alter view emp_view add constraint vemp_pk primary key (empno) disable
我们的客户已授予访问未定义主键的视图的权限。我知道 Entity Framework 需要一个主键供 table 识别。
但是对于没有主键的view还是可以查询的
我试图找到但总是 Entity Framework 给出错误提示:
Error: : EntityType 'ViewWeight' has no key defined. Define the key for this EntityType.
我知道键对 table 很重要,但对于仅供阅读的视图,是否有任何技巧或方法可以在不修改视图本身的情况下读取值。
在 Entity Framework 中不可能有没有主键的实体。
尝试从视图中获取可能的唯一键,组合列,...以创建唯一的主键。
如果不可能,则有一个解决方法,如果只是一个可查询的视图,则不需要对检索到的值执行其他操作,例如删除或更新。修改视图以添加 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();
在您的模型中添加
public Guid ID { get; set; }
并配置新的属性为主键。
但是要小心,因为这种代码没有编译检查。
我创建了包含主键的视图。确保视图中的所有字段都是特定数据类型:
Number(9) 而不是 Number,使用 CAST 获取您想要的类型
然后添加禁用的主键约束。除了被 entity framework 识别为密钥
外,它不会做任何事情alter view emp_view add constraint vemp_pk primary key (empno) disable