SQL Server视图可以有主键和外键吗?

.net ado.net-entity-data-model database-design entity-framework sql-server

是否可以在Microsoft SQL Server Management Studio中为数据库视图定义主键和外键?怎么样?

我正在尝试创建一个ADO.NET实体数据模型来读取我无法修改的四个旧的,格式不正确的数据库表。我已经创建了我需要的数据的视图。

这四个视图应该映射到一个简单的三实体EDMX,它具有一对多关系。

创建数据模型时出现此错误:

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

它正确地推断出两个视图的主键。但未能与其他两个这样做。

我的一个问题视图使用聚合函数:

SELECT MAX(...) ... GROUP BY ...

另一个应该有两个外键的复合主键。

热门答案

您需要定义视图,以便:

  • 包括所有PRIMARY KEY
  • 不使用任何JOIN
  • 不使用任何聚合函数或UNION

视图中的任何行都应映射到表中的一行。

我的一个问题视图使用聚合函数

它无法更新。对于只读实体, 这里有一个解决方案:

如果无法推断出密钥,则会将包含相应EntityType元素(没有Key元素)的代码注释添加到.edmx文件的SSDL部分。

在您的情况下,因为您似乎想要一个只读实体,您可以:

  1. 取消注释SSDL实体
    • 将一个/一些属性标记为Nullable =“False”
    • 添加适当的Key元素
    • 添加相应的定义查询。

对于第二个问题:

另一个应该有两个外键的复合主键

来自文档

表示数据库中两个表之间的多对多关系的表可能在概念架构中没有等效实体。当EDM工具遇到没有除两个外键之外的列的表时,映射表在概念模式中表示为多对多关联而不是实体。




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因