KeyBuilder 不包含 HasForeignKey 的定义

bax*_*er8 3 c# entity-framework-core

我正在尝试在 EntityFrameworkCore 中初始化我的数据库上的外键,并遵循本指南https://learn.microsoft.com/en-us/ef/core/modeling/keys?tabs= Fluent-api 我相信我应该只需使用 .HasForeignKey 方法即可。但是我收到以下错误

“KeyBuilder”不包含“HasForeignKey”的定义,并且找不到接受“KeyBuilder”类型的第一个参数的可访问扩展方法“HasForeignKey”(您是否缺少 using 指令或程序集引用?)

这是我的代码

using Microsoft.EntityFrameworkCore;
using TemplateApi.Models;

namespace TemplateApi
{
    public class DatabaseContext : DbContext
    {
        public DbSet<Department> Departments { get; set; }
        public DbSet<Role> Roles { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Department>()
                .HasKey(b => b.ID);
                

            modelBuilder.Entity<Role>()
                .HasKey(b => b.Id)
                .HasForeignKey(b => b.Department_Id);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

部门:

using System.Collections.Generic;

namespace TemplateApi.Models
{
    public class Department
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public ICollection<Role> Roles { get; set; }

    }
}
Run Code Online (Sandbox Code Playgroud)

角色:

namespace TemplateApi.Models
{
    public class Role
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Department_Id { get; set; }
        public Department Department { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

还有我的csproj

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

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.7" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Abstractions" Version="3.1.7" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.1.7">
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="3.1.7" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.1.7" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.7">
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.4" />
  </ItemGroup>

</Project>
Run Code Online (Sandbox Code Playgroud)

我不知道如何修复这个错误,因为我在网上看到的所有内容都说添加实体框架核心的关系元素

Mic*_*ael 6

你需要做这样的事情:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Department>()
        .HasKey(b => b.ID);

    modelBuilder.Entity<Role>()
        .HasKey(b => b.Id);
        
    modelBuilder.Entity<Role>()
        .HasOne(p => p.Department)
        .WithMany(b => b.Roles)
        .HasForeignKey(p => p.Department_Id);
}
Run Code Online (Sandbox Code Playgroud)

查看EF Core 中的关系