如何首先将 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 字符串的自定义属性一起使用?