c# - 如何设置下面的导航属性?

标签 c# entity-framework

我是“ Entity Framework ”的新手,我有以下问题。 假设我有以下两个实体

public class Action
{
    public int Id {get;set;}
    public string ActionCode {get;set;}

    //navigation property
    public virtual DescriptionMaster ActionCodeDescription {get;set;}
}

public class DescriptionMaster
{
    public int Id {get;set;}
    public string Type {get;set;}
    public string Code {get;set;}
    public string Description {get;set;}
}

现在您可能会注意到我在“Action”类中有一个名为“ActionCodeDescription”的导航属性,并且两个实体(Action 和 DescriptionMaster)具有一对一的关系。
但是,对于“ActionCodeDescritption”属性,我没有任何外键列,相反,它应该是满足以下条件的列。

DescriptionMaster.Type=="Action" and  DescriptionMaster.Code==Action.ActionCode

是否可以根据特定条件加载导航属性而不是使用任何外键?
我知道,我也许可以做类似下面的事情,但如果可能的话,我只想通过某种方式在“ActionCodeDescription”上设置“数据注释”来实现它。

    Action _action= dbContext.Actions.FirstOrDefault(a=>a.Id==1);
    _action.ActionCodeDescription=dbContext.DescriptionMasters.FirstOrDefault(x=>x.Type=="Action" && x.Code==_action.ActionCode);

最佳答案

来自“ Entity Framework dbContext 编程”第 35 页: 仅加载集合导航属性内容的子集的能力是一种常见的请求,但 EF 当前不支持。

不是通过预加载也不是通过延迟加载。 通过显式加载,它是但这是您在问题的最后一个代码片段中已经知道的变体。

尽管如此,您可能想阅读以下内容: https://msdn.microsoft.com/en-us/data/jj574232#explicitFilter

使用投影当然可以只加载导航属性中相关数据的子集。

关于c# - 如何设置下面的导航属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28984390/

相关文章:

c# - Autofac 和通用命令模式

c# - 通用 Windows 应用程序中的 BringToFront/SetZIndex

sql - Entity Framework : Retrieve data with a condition on two different context

.net - 导航到通用定义实体的正确方法

c# - WinForms:如何检查 C# 文本框中的最少字符数?

c# - 指定的消息不存在。错误代码 :MessageNotFound Prod-WorkerError Context

c# - 具有单数据库多上下文的 EF6 Code First 迁移

entity-framework - 选择最后插入的十行

c# - 在 WPF 中,如何在保留键盘快捷键的同时右对齐菜单项?

c# - 使用 Entity Framework 和 WCF 的大型应用程序