如果您无法修改模型类。
您可以在上下文中简单地添加一个检索审计的方法。
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace EFCoreFluentApi1.Context
{
public class MyContext : DbContext
{
public DbSet<Audit> Audit { get; set; }
public DbSet<Employee> Employee { get; set; }
public MyContext(DbContextOptions options) : base(options)
{
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
base.OnConfiguring(optionsBuilder);
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<Employee>().HasKey(e => e.EmployeeId);
builder.Entity<Employee>().Property(e => e.EmployeeId);
builder.Entity<Audit>().HasKey(e => e.AuditId);
builder.Entity<Audit>().Property(e => e.AuditId);
builder.Entity<Audit>().HasOne(e => e.ModEmployee).WithMany().HasForeignKey(e => e.EmployeeId);
builder.Entity<Employee>().HasData(new Employee[]
{
new Employee{ EmployeeId = 1 },
new Employee{ EmployeeId = 2 },
new Employee{ EmployeeId = 3 },
new Employee{ EmployeeId = 4 }
});
builder.Entity<Audit>().HasData(
new Audit[]
{
new Audit
{
AuditId = "Audit1",
EmployeeId = 1
},
new Audit
{
AuditId = "Audit2",
EmployeeId = 1
},
new Audit
{
AuditId = "Audit3",
EmployeeId = 1
},
new Audit
{
AuditId = "Audit4",
EmployeeId = 2
},
new Audit
{
AuditId = "Audit5",
EmployeeId = 3
},
new Audit
{
AuditId = "Audit6",
EmployeeId = 3
},
new Audit
{
AuditId = "Audit7",
EmployeeId = 4
},
new Audit
{
AuditId = "Audit8",
EmployeeId = 4
},
new Audit
{
AuditId = "Audit9",
EmployeeId = 4
},
new Audit
{
AuditId = "Audit10",
EmployeeId = 4
}
});
}
public ICollection<Audit> GetAudits(int employeeId)
{
return Audit.Where(e => e.EmployeeId == employeeId).ToList();
}
}
}
如果您需要填充ModEmployee,可以使用Include方法。
using EFCoreFluentApi1.Context;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using System;
using System.IO;
using System.Linq;
using System.Text.Json;
namespace EFCoreFluentApi1
{
class Program
{
static void Main(string[] args)
{
IConfiguration configuration = new ConfigurationBuilder().
SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", false, true)
.Build();
DbContextOptions options = new DbContextOptionsBuilder<MyContext>()
.UseSqlServer(configuration.GetConnectionString("MyConnectionString"))
.EnableSensitiveDataLogging(true).Options;
using (var context = new MyContext(options))
{
var result = context.Audit.Include(e => e.ModEmployee).ToList();
foreach (var value in result)
{
Console.WriteLine($"█ Audit: {value.AuditId}");
Console.WriteLine(JsonSerializer.Serialize(value));
Console.WriteLine();
}
Console.ReadLine();
}
}
}
}
请查看我的示例 https://github.com/JomaStackOverflowAnswers/EFCoreFluentApi1
该项目的目标框架为 <TargetFramework>netcoreapp3.1</TargetFramework>
请检查是否需要显式设置
https://learn.microsoft.com/en-us/ef/core/modeling/entity-properties?tabs=fluent-api%2Cwithout-nrt#explicit-configuration
OnModelCreating
配置下工作。问题一定是出在其他地方。 - Marcos DimitriomodelBuilder.Entity<Audit>().HasOne(a => a.ModEmployee).WithMany().HasForeignKey(a => a.EmployeeId);
对我来说很好用。 - Guru Stron