C# EF Core 3.0替换IMutableIndex.Npgsql()方法

C# EF Core 3.0替换IMutableIndex.Npgsql()方法,c#,entity-framework,.net-core,npgsql,.net-core-3.0,C#,Entity Framework,.net Core,Npgsql,.net Core 3.0,在我们现有的项目中(使用Entity Framework Core 2.2和Npgsql),我们在DB上下文中有以下代码: protected override void OnModelCreating(ModelBuilder modelBuilder) { ... var entityTypes = modelBuilder.Model.GetEntityTypes().Where(x => !x.IsQueryType); foreach (var entit

在我们现有的项目中(使用Entity Framework Core 2.2和Npgsql),我们在DB上下文中有以下代码:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    ...
    var entityTypes = modelBuilder.Model.GetEntityTypes().Where(x => !x.IsQueryType);
    foreach (var entityType in entityTypes)
    {
        var indexes = entityType.GetIndexes();

        foreach (var index in indexes)
        {
            index.Npgsql().Name = GetCustomIndexName(index.Npgsql().Name, entityType);
        }
    }
    ...
}
当迁移到.NET Core 3.0时,有很多突破性的更改。其中一个是属性
IsQueryType
。基于,我将属性更改为
IsKeyless
,这应该是等效的

但是,由于文档非常稀少,有时甚至不存在,我很难找到什么可以替代
index.Npgsql().Name
。Visual Studio正在
Npgsql()
扩展方法下显示一条错误消息,表示对类型“RelationalKeyAnnotations”的引用声明它是在“Microsoft.EntityFrameworkCore.Relational”中定义的,但找不到它


根据另一个例子,我假设正确的等价物是
index.GetNpgsqlName()
,但似乎不存在这样的方法。为了获得正确的扩展方法,我是否需要安装其他Nuget软件包?或者,是否有其他方法来获取和设置特定于提供商的索引名?

感谢您试用预发布版本,因为您已经注意到事情在不断变化,而且并不完全稳定


我目前正在积极地将Npgsql EF提供程序移植到preview7(即将发布),并专门研究元数据访问器。因此,我建议再等一周左右,然后切换到preview7。

EF Core 3.0仍在预览中,所以很多东西都没有文档记录是正常的

但是,基于和,方向似乎是删除常见的
Relational()
扩展(以及特定于提供程序的扩展,如
Npgsql()
),并用
Get
/
Set
扩展方法替换属性

因此,所讨论的代码应该是

index.SetName(GetCustomIndexName(index.GetName(), entityType));

还有一个新的
GetDefaultName()
方法,用于一些事情,包括索引,这可能很有用。

谢谢你,但我将等待@Shay Rojansky确认我们是否应该使用新的Get/Set方法,或者更确切地说是更新的Npgsql扩展方法。呵呵,好的。但是MS从他们的提供程序中删除了这些方法,所以我认为他除了删除
Npgsql()
method.是的,这是正确的。元数据API正在更改为仅为Npgsql特定的内容调用GetNpgsqlFoo()扩展方法。