我有一个配置了以下实体的实体框架代码优先 DbContext。在这个例子中,类 Bar 是类 Foo 的子类。
public class Foo
{
public Guid Id { get; set; }
public virtual ICollection<Bar> Bars { get; set; }
}
public class Bar
{
public Guid Id { get; set; }
public Guid FooId { get; set; }
public virtual Foo Foo { get; set; }
}
现在我知道,在内部,Entity Framework 理解 Foo 和 Bar 之间的关系是由外键 Bar.FooId 定义的。我想做的是在运行时使用表达式以某种方式提取这种关系。我想实现一个行为如下的方法:
var context = new FooBarDbContext();
var bar = context.Set<Bar>().First();
// I want this method to return bar.FooId when passed the expression b => b.Foo
object result = MyService.GetForeignKeyValue(bar, b => b.Foo);
现在在这个简单的例子中,我知道我可以得到 bar.FooId 并完成。关键是我正在编写一个类,我相信上面指定的 GetForeignKeyValue 方法对用户来说是最干净的接口。
是否可以查询 DbContext 配置以确定哪个属性用作导航属性的外键?(假设有一个)