首页 > 解决方案 > 实体框架 - 使用 Fluent API 配置获取相关项目而无需显式引用

问题描述

假设我有一个带有可选属性 X 的数据库表 A。我有一个带有复合键 (Y, X) 的表 B。这两个表没有以任何方式明确相关。

例如

create table A
(
    Id uniqueidentifier not null,
    X uniqueidentifier null
)

create table B
(
    Y uniqueidentifier not null,
    X uniqueidentifier not null,
    Constraint PK_B Primary Key (Y, X)
)

A 和 B 通过属性 X 隐式相关,因为 X 是一个孤立的 id(它的基表已被移出)

对于 C# 代码中的模型 A,如何IList<B>使用属性 X 进行填充以获取 B 中包含 X 的所有项目?理想情况下,我想使用 Fluent API 配置。

例如

public class A {
    public Guid Id {get; set;}
    public Guid? X {get; set;}
    public IList<B> RelatedItems {get; set;}
}

public class B {
    public Guid X {get; set;}
    public Guid Y {get; set;}
}

如何使用 Fluent API 配置我的实体,以便我可以使用类似的东西

var list = await context.AQuery()
.Include(a => a.RelatedItems)
.ToListAsync().ConfigureAwait(false);

或任何其他方式在 A 中填充 IList

提前致谢!

标签: c#apientity-framework-6fluent

解决方案


在你的模型中 ax 是一个属性,一个属性有一个 getter,你可以设置 x 属性的 get 方法从数据库中检索记录(类似于延迟加载设计模式)

public IList<SomeStuff> X {
get { // go get records from database }
}

这将花费你额外的费用,所以我不确定这是否是你想要的


推荐阅读