【发布时间】:2022-02-07 15:23:48
【问题描述】:
我在 Azure SQL Server 中使用代码优先 EF Core 6。我有几种实体类型用于跨越几个月的交易。需要将注释与不同的实体相关联。注释将由多个用户在交易时间范围内添加。出于审计目的,我需要能够跟踪输入的每个注释的每个版本。我使用系统版本化的时态表来跟踪数据库其余部分的实体更改。
我想在事务实体中有一个 Notes 列表导航属性。我不希望 Notes 实体中有相应的导航属性。
public class TransactionEntity
{
...
public List<Note> Notes { get; set; }
}
public class Note
{
// text, timestamp, CreatedBy, ValidFrom, ValidTo
}
我将其配置为:
public void Configure(EntityTypeBuilder<TransactionEntity> entity)
{
entity.HasMany(t => t.Notes)
.WithOne();
}
当我为此创建迁移时,它会在 Notes 表中创建一个外键列。我不希望它这样做,因为会有 4-5 个不同实体中的注释列表,并且我不希望每个实体都有一个外键列。
我希望 EF Core 在后台自动为每个事务实体类型创建一个连接表,以便在代码中我可以只引用 TransactionEntity.Notes 而无需处理连接表。 EF Core 提供了多对多关系,但这不是多对多关系,我宁愿避免以这种方式处理它,只是为了拥有自动连接表选项。我想我也可以使用拥有的实体自动创建连接表。但这样做的问题是,我看不到任何方法可以将时态表功能与拥有的实体一起使用,我必须提出仅适用于这一属性的审计代码。
我可以为每个需要注释的事务实体手动创建连接表。但我希望有一个更简洁、代码更少的解决方案,让我无需手动查询连接表即可访问笔记。我还希望能够快速向新的事务实体类型添加注释,而无需创建新的连接表。
有没有一种我不知道的方法,或者在这里更有意义的不同方法?
【问题讨论】:
标签: .net-core entity-framework-core