无法将视图添加到edmx

Nao*_*aor 26 .net c# entity-framework

尝试将视图添加到edmx文件时,没有任何反应.
我使用wxl编辑器打开了edmx文件,我注意到以下错误:

警告6013:表/视图'CellularOrders.dbo.V_LINK'没有定义主键,也没有推断出有效的主键.此表/视图已被排除.要使用该实体,您需要检查您的架构,添加正确的密钥并取消注释.

(重要的东西 - 我没有也不需要将基于视图的表添加到edmx.此外,该视图仅用于对数据执行select语句)

因此,在数据库中,我更新了T_LINK表,并将其中一个反映在视图上的字段作为主键.然后,当我再次尝试将视图添加到edmx时,再也没有发生.

我怎么解决这个?是否可以选择在不对表做任何事情的情况下解决这个问题?我可以添加另一个视图,以某种方式包装旧视图但具有固定属性?

Dav*_*büz 32

只需在视图中添加一列我添加了一个Row_Number来创建这样的键

SELECT ISNULL(CAST((row_number() OVER (ORDER BY tab.ENTRYDATE)) AS int), 0) 
AS EDMXID,...other columns go on
Run Code Online (Sandbox Code Playgroud)

tab表达式是表别名,entrydate只是在sql-server func中构建的row_number所需的字段.

你可以选择不同的方式,例如

select newid() as MYEDMXID,....so on
Run Code Online (Sandbox Code Playgroud)

希望有帮助


Lad*_*nka 28

添加到实体模型的每个表或视图都必须具有一些键.它实际上不一定是主键.如果表没有定义主键,EF将尝试使用简单规则推断密钥:它将采用所有非可空的非计算非二进制列并将它们标记为实体密钥.如果没有这样的列存在,则无法自动添加实体,设计者将抛出上述警告.解决方法是手动添加视图并自行选择密钥,但一旦执行此操作,就无法使用"从数据库更新",因为它将始终覆盖您的更改.

您定义的键应该是唯一的,否则您可能会遇到与内部使用的身份映射相关的其他问题.

  • 我将表的一个字段标记为主键,但 EF 仍然不加载视图并出现同样的问题。视图没有主键,但表有。EF 如何知道哪个字段是视图的主键? (2认同)