带有 EF Core 和 CosmosDB .NET 5 的 ASP.Net Core - IdentityRole 问题

Posted

技术标签:

【中文标题】带有 EF Core 和 CosmosDB .NET 5 的 ASP.Net Core - IdentityRole 问题【英文标题】:ASP.Net Core with EF Core and CosmosDB .NET 5 - IdentityRole issue 【发布时间】:2021-06-04 08:43:51 【问题描述】:

我的问题和这个类似。

ASP.Net Core with EF Core and CosmosDB - IdentityRole issue

提供的答案不起作用。它会产生其他问题。一旦我将应用程序从 .NET Core 3.1 升级到 .NET 5,这些错误就会开始出现。降级应用程序会使所有错误都消失。显然,这个问题与 efcore 5 中引入的对 cosmos 的乐观并发支持有关。

https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-5.0/whatsnew#cosmos

任何帮助将不胜感激。

【问题讨论】:

先生您好,根据您的描述,我认为您的问题是当您将 core3.1 升级到 5 时,遇到错误 'System.InvalidOperationException: 'The entity type 'IdentityRole' has属性“ConcurrencyStamp”作为其并发标记,但仅支持“_etag”。考虑使用“EntityTypeBuilder.UseETagConcurrency”。 ' ?? 正确。这是我得到的错误。正如我上面提到的帖子中提到的,我尝试应用:``` builder.Property(d => d.ConcurrencyStamp) .IsETagConcurrency(); ``` 但是在应用这个之后,我的身份提供者给出了并发错误,我无法登录。 我不确定,但也许你可以看看this sample。我对它进行了测试,效果很好。 您有什么进展吗先生?如果存在,请随时分享您的进一步问题。 【参考方案1】:

我认为this sample 可以帮助解决您的问题,我在我身边进行了测试,效果很好。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore.Cosmos" Version="5.0.2" />
  </ItemGroup>

</Project>



using Microsoft.EntityFrameworkCore;

namespace Cosmos.ModelBuilding

    public class OrderContext : DbContext
    
        public DbSet<Order> Orders  get; set; 
        public DbSet<Distributor> Distributors  get; set; 

        #region Configuration
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
            => optionsBuilder.UseCosmos(
                "endpoint",
                "primarykey",
                databaseName: "Tasks");

        #endregion

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        
            #region DefaultContainer
            modelBuilder.HasDefaultContainer("Store");
            #endregion

            #region Container
            modelBuilder.Entity<Order>()
                .ToContainer("Orders");
            #endregion

            #region NoDiscriminator
            modelBuilder.Entity<Order>()
                .HasNoDiscriminator();
            #endregion

            #region PartitionKey
            modelBuilder.Entity<Order>()
                .HasPartitionKey(o => o.PartitionKey);
            #endregion

            #region ETag
            modelBuilder.Entity<Order>()
                .UseETagConcurrency();
            #endregion

            #region PropertyNames
            modelBuilder.Entity<Order>().OwnsOne(
                o => o.ShippingAddress,
                sa =>
                
                    sa.ToJsonProperty("Address");
                    sa.Property(p => p.Street).ToJsonProperty("ShipsToStreet");
                    sa.Property(p => p.City).ToJsonProperty("ShipsToCity");
                );
            #endregion

            #region OwnsMany
            modelBuilder.Entity<Distributor>().OwnsMany(p => p.ShippingCenters);
            #endregion

            #region ETagProperty
            modelBuilder.Entity<Distributor>()
                .Property(d => d.ETag)
                .IsETagConcurrency();
            #endregion
        
    

【讨论】:

以上是关于带有 EF Core 和 CosmosDB .NET 5 的 ASP.Net Core - IdentityRole 问题的主要内容,如果未能解决你的问题,请参考以下文章

Azure Cosmos DB(EF/Core)-驼峰式属性名称

为啥 SelectMany 不适用于 EF Core Cosmos DB?

带有 UWP 的 EF Core - Visual Studio 19

如何在 .Net Core 6.0 中结合 CosmosDB、Entity Framework 和 OData?

带有 EF Core 和内存数据库提供程序的原始 sql

带有 EF Core / ASP.NET Core 的 OData - 好还是坏?