【问题标题】:Configuring UseIdentityColumn in EF Core 2.0在 EF Core 2.0 中配置 UseIdentityColumn
【发布时间】:2020-04-19 15:58:30
【问题描述】:

我正在将使用 .NET Core 3.0 编写的应用程序移植到 .NET Core 2.0。 下面是适用于 .NET Core 3.0 的代码

public class ArtistConfiguration : IEntityTypeConfiguration<Artist>
{
    public void Configure(EntityTypeBuilder<Artist> builder)
    {
        builder
            .HasKey(a => a.Id);

        builder
            .Property(m => m.Id)
            .UseIdentityColumn();

        builder
            .Property(m => m.Name)
            .IsRequired()
            .HasMaxLength(50);

        builder
            .ToTable("Artists");
    }
}

我在 UseIdentityColumn 收到错误 -

严重性代码描述项目文件行抑制状态 错误 CS1061“PropertyBuilder”不包含“UseIdentityColumn”的定义,并且找不到接受“PropertyBuilder”类型的第一个参数的可访问扩展方法“UseIdentityColumn”(您是否缺少 using 指令或程序集引用?) MyMusic.Data

.NET Core 2.0 是否有不同的配置来实现这一点?

一些答案​​建议使用 UseSqlServerIdentityColumn,但是,这对我不起作用。

【问题讨论】:

    标签: .net entity-framework .net-core


    【解决方案1】:

    您正处于“弃用”漩涡的版本更改中!

    如果您只想要版本 2.x,那么您不需要条件。但是我要留下条件来说明发生了什么。

    请注意,您的包导入(下面的“PackageReference”)也必须更改它们的版本。

    csproj 文件(下)

    您必须适应 2.0 和 3.0。但是你明白了 2.1 和 3.1 的想法。

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <TargetFrameworks>netcoreapp2.1;netcoreapp3.1</TargetFrameworks>
      </PropertyGroup>
    
    <!--  [2.1.1,2.2.0) means .. very explicit that it should be "Anything >= to 2.1.1" but also "less then 2.2.0" .... because DotNetCore 2.2 is not in LTS (long term support) -->
      <ItemGroup Condition=" '$(TargetFramework)' == 'netcoreapp2.1'">
        <PackageReference Include="Microsoft.EntityFrameworkCore" Version="[2.1.1,2.2.0)" />
        <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="[2.1.1,2.2.0)" />
        <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="[2.1.1,2.2.0)" />
      </ItemGroup>
    
    <!-- 3.1.* is simplified version of anything 3.1.x of course -->
      <ItemGroup Condition=" '$(TargetFramework)' == 'netcoreapp3.1'">
        <PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.*" />
        <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="3.1.*" />
        <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.*" />
      </ItemGroup>
    
    
    
      <PropertyGroup Condition=" '$(TargetFramework)' == 'netcoreapp2.1'">
        <DefineConstants>NETCORE;NETCORE2_1</DefineConstants>
      </PropertyGroup>
    
      <PropertyGroup Condition=" '$(TargetFramework)' == 'netcoreapp3.1'">
        <DefineConstants>NETCORE;NETCORE3_1</DefineConstants>
      </PropertyGroup>
    
    
    </Project>
    

    现在在您的 .cs 代码中

    #if (NETCOREAPP2_1)
                builder.Property(c => c.Id).ValueGeneratedOnAdd().UseSqlServerIdentityColumn();
    #endif
    
    #if (NETCOREAPP3_1)
                builder.Property(c => c.Id).ValueGeneratedOnAdd().UseIdentityColumn();
    #endif
    

    副话题。

    3.1.* 被称为“浮动版”

    https://docs.microsoft.com/en-us/nuget/concepts/dependency-resolution#floating-versions


    另一种方法.. [2.1.1,2.2.0) .. 我认为它被称为“语义版本控制”.. 可以在下面的链接中看到。

    https://docs.microsoft.com/en-us/nuget/concepts/package-versioning#version-ranges

    …………

    LTS(长期支持)

    https://dotnet.microsoft.com/platform/support/policy/dotnet-core

    2.2“出局”

    https://devblogs.microsoft.com/dotnet/net-core-2-2-will-reach-end-of-life-on-december-23-2019/

    【讨论】:

    • 感谢您向我展示条件句,学到了一些新东西:)
    • @Kush。我在这个答案中添加了更多的 packagereference 超级魔法。
    猜你喜欢
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    相关资源
    最近更新 更多