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将尝试使用简单规则推断密钥:它将采用所有非可空的非计算非二进制列并将它们标记为实体密钥.如果没有这样的列存在,则无法自动添加实体,设计者将抛出上述警告.解决方法是手动添加视图并自行选择密钥,但一旦执行此操作,就无法使用"从数据库更新",因为它将始终覆盖您的更改.
您定义的键应该是唯一的,否则您可能会遇到与内部使用的身份映射相关的其他问题.