我是实体框架的新手,并试图以自己的方式进入它。我正在处理以下内容:
数据库类型:SQLite
2 个表,使用
生成CREATE TABLE Accounts
(
AccountId STRING,
DisplayName STRING,
PRIMARY KEY (AccountId)
)
CREATE TABLE Reviews
(
Author STRING,
CreatedOn STRING,
Id INTEGER,
PRIMARY KEY(Id)
)
C# 中的实体:
[PrimaryKey(nameof(AccountId))]
class AccountEntry
{
public string? AccountId { get; set; }
public string? DisplayName { get; set; }
}
和
[PrimaryKey(nameof(Id))]
class ReviewEntry
{
public string? Author { get; set; }
public string? CreatedOn { get; set; }
public int Id { get; set; }
public AccountEntry? AuthorAccount { get; set; }
}
我的目标是用从查找派生的
AuthorAccount
对象填充 AccountEntry
字段,该对象使用字段 Author
中的 Id 在帐户表中进行查找。
为此,我已超载
OnModelCreating
,如下:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<ReviewEntry>()
.HasOne(e => e.AuthorAccount)
.WithOne()
.HasForeignKey<ReviewEntry>(e => e.Author);
}
从我的
DbSet<ReviewEntry>
派生类访问 DbContext
不会引发异常,但检索到的 AuthorAccount
数据集中的 ReviewEntry
属性始终为 null
,我无法弄清楚为什么( ReviewEntry.Account
确实包含 Accounts
表中可用的有效帐户 ID。
非常感谢@Svytoslav Danyliv 为我指明了正确的方向!如果其他人遇到类似问题,有一个 Microsoft 页面整齐地列出了引用实体的延迟加载和急切加载的各种方法:https://learn.microsoft.com/en-us/ef/ef6/querying/lated-数据