【发布时间】:2019-01-25 22:07:47
【问题描述】:
假设我有一个带有可选属性 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,如何使用属性 X 填充 IList<B> 以获取 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
提前致谢!
【问题讨论】:
-
嗨,你已经尝试过了吗?我们可以看到您在哪里,以及您是否实际上已经拥有带有复合键的表。如果你还没有,那么你应该首先把它作为你的主要目标。
-
由于
X不是 A 的 PK,因此您不能让 EF6 将 B 与 A 关联起来。因此唯一的选择是将 LINQ 查询与手动连接一起使用。 -
@Stefan - 这正是我们所拥有的。原因是,这两个表的外键 X 都引用了一个表,我们决定出于一些性能问题将其删除。但是我们仍然需要得到我描述的相关记录。以前通过这个删除的表很容易!!
-
@IvanStoev - 手动方式需要在单独的数据库之间来回进行一些操作,因为正如我之前提到的,我们在单独的数据库中删除了(相关)表。如果有一些神奇的配置,我会尽量避免这种情况!
-
@GertArnold,IvanStoev 看起来我只剩下手动(LINQ)方式了。谢谢大家。如果我发现有趣的东西会更新/分享。
标签: c# api entity-framework-6 fluent