如何首先将 EF Core 代码与 azure synapse 一起使用

问题描述

我正在尝试使用 C# 和 EF Core 迁移在 Azure 突触中创建数据库,但遇到了一个问题,当我尝试运行 update-database 命令时出现以下错误:

不支持强制唯一约束。要创建非强制唯一约束,您必须在语句中包含 NOT ENFORCED 语法。

以下示例演示了 azure synapse 接受的使用 PRIMARY KEY 创建表的形式:

CREATE TABLE dbo.sample_table
(
    c1 int IDENTITY(1,1) NOT NULL,c2 char(10) NULL,c3 datetime NULL
)

ALTER TABLE t1 
    ADD CONSTRAINT PK_t1_c1 
        PRIMARY KEY NONCLUSTERED (c1) NOT ENFORCED

这是因为要使用主键必须包括:

NONCLUSTERED (myPrimaryKey) NOT ENFORCED

要包含 NONCLUSTERED,只需使用 configuração abaixo。

public class ManifestationMap : IEntityTypeConfiguration<Manifestation>
{
    public void Configure(EntityTypeBuilder<Manifestation> builder)
    {
        builder.ToTable("Manifestation");

        builder.HasKey(prop => prop.Id)
           .IsClustered(false); // Include NONCLUSTERED 
        ...

但我没有找到包含 NOT ENFORCED 的解决方案。

Obs:我在使用 Azure SQL Server 和使用本地安装的 SQL Server 时都没有这个问题。

解决方法

Synapse 使用与 Azure SQL 或 SQL Server 不同的数据库引擎,并且实体框架当前不支持它,因此您可能会遇到这样的兼容性问题。您可以在此处对功能请求进行投票:https://feedback.azure.com/forums/307516-azure-synapse-analytics/suggestions/12868725-support-for-entity-framework

与此同时,您最好的选择是在遇到此类问题时使用 custom SQL scripts,而不是依靠通过 MigrationBuilder.Sql() 自动生成的脚本来解决这些问题。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...