【发布时间】:2021-08-13 04:38:00
【问题描述】:
我正在尝试使用 2 个实体进行代码优先模式:
- 请求
- 证书
一个请求可以有(可选)一个证书,但一个证书总是有一个请求(零或一对一)
我将实体定义如下:
public class Request
{
public virtual Certificate Certificate { get; set; }
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public long RequestID { get; set; }
public string fieldA { get; set; }
}
public class Certificate
{
public virtual Request Request { get; set; }
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public long RequestID { get; set; }
public string fieldB { get; set; }
}
并且在模型构建器中可以流畅地定义相关性:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Request>().ToTable("Requests");
modelBuilder.Entity<Certificate>().ToTable("Certificates");
modelBuilder.Entity<Request>()
.HasOne<Certificate>(item => item.Certificate)
.WithOne(item => item.Request)
.HasForeignKey<Certificate>(item => item.RequestID);
}
模型构建正确,我可以保存实体,但是当我查询具有证书的请求时,导航属性保持为空:
Request req = await db.Requests.FirstOrDefaultAsync(item => item.RequestID == 1);
// req.Certificate is null
我错过了什么?
使用 EntityFrameworkCore V5.0.6 和 .net 5
【问题讨论】:
标签: c# .net sql-server entity-framework entity-framework-core