gpt4 book ai didi

c# - 如何首先使用 EF 核心 6 代码启用仅附加分类帐表

转载 作者:行者123 更新时间:2023-12-05 05:39:08 25 4
gpt4 key购买 nike

我首先使用 EF 代码为 azure sql 数据库创建迁移。我想开始使用“更新”和“仅附加”分类帐表。我知道我可以将整个数据库设置为更新分类帐,这样当我以通常的方式创建新表时,它们将自动使用历史表更新分类帐表。但我想改为选择更新哪些表以及仅附加哪些表。我找不到任何关于如何解决这个问题的资源。我只想追加的表之一实际上是我的 MigrationsHistory 表。有没有办法用 EF 核心做到这一点?

---更新[说明]---

我现在可能已经足够清楚了。以上。

我正在寻找的是如何首先使用实体​​框架代码归档所需的结果。

换句话说,使用 sql 我可以做这样的事情:

CREATE SCHEMA [AccessControl];
GO
CREATE TABLE [AccessControl].[KeyCardEvents]
(
[ID] INT NOT NULL,
[Timestamp] Datetime2 NOT NULL
)
WITH (LEDGER = ON (APPEND_ONLY = ON));

获取一个只能追加的表。但是如果我想首先像这样创建模型:

public class AccessControl
{
public Int Id { get; set; }
public DateTime Timestamp{ get; set; }
}

是否有我可以添加到类中的属性,以便 EF 知道将其设为仅追加表?或者有其他方法可以做到吗?

此外,请注意,我也很好奇如何使 __EFMigationsHistory 表成为仅附加表。第一次在数据库上运行迁移时会创建此表。

最佳答案

目前似乎不支持 EF Core Code First 中的 Azure Sql 数据库分类帐表。

即使查看 EF 7(撰写本文时的下一个 EF Core 版本)的当前开发代码SqlServerMigrationsSqlGenerator.cs class ,具有以下签名的 Generate 方法重载

protected override void Generate(
CreateTableOperation operation,
IModel? model,
MigrationCommandListBuilder builder,
bool terminate = true)

只能填写“表选项”(将在 WITH 子句中作为生成的 CREATE TABLE 语句的一部分提供):

  • 单独使用 SYSTEM_VERSIONING = ON 选项
  • 和/或MEMORY_OPTIMIZED = ON选项

第一个对应于,例如:

modelBuilder
.Entity<Employee>()
.ToTable("Employees", b => b.IsTemporal());

而第二个对应于,例如:

modelBuilder.Entity<Blog>().IsMemoryOptimized();

不幸的是,目前在 EF Core 7.0 Plan 中都没有提到 Ledger 表支持, 也不在 EF Core Issues in GitHub. .

关于c# - 如何首先使用 EF 核心 6 代码启用仅附加分类帐表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72771108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com