C# EF Core 3.0替换IMutableIndex.Npgsql()方法
在我们现有的项目中(使用Entity Framework Core 2.2和Npgsql),我们在DB上下文中有以下代码: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
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()扩展方法。