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)
我不知道如何修复这个错误,因为我在网上看到的所有内容都说添加实体框架核心的关系元素
你需要做这样的事情:
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 中的关系。