实体框架和现有数据库:主要关键问题
使用实体框架 (EF) 和预先存在的数据库通常会带来挑战,特别是当表缺少主键时。 创建实体数据模型可能会导致错误,不包括没有错误的表。 这就提出了一个关键问题:向这些表添加主键对于 EF 中的数据操作绝对必要,还是有替代方法?
解决方法:利用 ISNULL 和 NULLIF
正如 Tillito 所强调的,一个实用的解决方案涉及 SQL Server 视图的巧妙解决方法。 通过将原始视图的 SELECT 语句封装在另一个 SELECT 语句中,您可以在不修改底层表结构的情况下操作数据。
要将列指定为 EF 用途的主键,请使用 ISNULL
函数将其包装。 例如:
<code class="language-sql">SELECT ISNULL(MyPrimaryID, -999) AS MyPrimaryID, ... FROM ( ... ) AS temp</code>
相反,要防止 EF 将列视为主键,请使用 NULLIF
函数:
<code class="language-sql">SELECT NULLIF(AnotherProperty, '') AS AnotherProperty, ... FROM ( ... ) AS temp</code>
实际应用
考虑这样一个场景:您的应用程序使用现有数据库中的多个表,并且您希望避免更改原始表架构。 通过在视图定义中实现此技术,并如演示的那样合并 ISNULL
和 NULLIF
,EF 将正确识别所需的主键,而不需要任何架构修改。
即使没有预先存在的主键,此方法也可以将现有数据库表无缝集成到 EF 应用程序中,从而提供灵活高效的解决方案。
以上是实体框架:是否必须向现有表添加主键以进行数据操作?的详细内容。更多信息请关注PHP中文网其他相关文章!