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

Posted

技术标签:

【中文标题】如何首先将 EF Core 代码与 azure synapse 一起使用【英文标题】:How use EF Core code first with azure synapse 【发布时间】:2021-07-11 23:04:01 【问题描述】:

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

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

以下示例演示了 azure synapse 接受的用于使用主键创建表的表单:

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 时也没有。

【问题讨论】:

【参考方案1】:

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() 自动生成的脚本来解决这些问题。

【讨论】:

以上是关于如何首先将 EF Core 代码与 azure synapse 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

EF Core 5 - 如何将 EF.Functions.Like 与映射到 JSON 字符串的自定义属性一起使用?

EF Core中的多对多映射如何实现?

如何使用 EF Core 7 批量删除数据

如何改造基于非通用的 EF Core 代码以使用通用 IQueryable

EF Core中如何设置数据库表自己与自己的多对多关系

MVC 5 - 如何首先使用 EF 代码更新关系表