实体框架 - 创建导航属性

Sim*_*ann 5 c# sql entity-framework visual-studio

我在Visual Studio中使用实体框架wizzard创建了一个db-model.有两个表(job,stocktype)与表stocktype2job相互关联.

在此输入图像描述

Job <------- no direct relation / navigation property --------> StockType
 |                                                                  |
 |                                                                  |
 ---------------------> StockType2Job ----------------------------->
Run Code Online (Sandbox Code Playgroud)

有了Job Object,我可以做这样的事......

EntitiesObject db = new EntitiesObject();
Job job = db.Jobs.SingleOrDefault(j => j.IdJob == 40);

List<StockType> stockTypes = new List<StockType>;
foreach (StockType2Job st2j in job.StockType2Jobs)
    {
        stockTypes.add(st2j.StockType);
    }
Run Code Online (Sandbox Code Playgroud)

这应该工作得很好.但是有没有办法在作业实体中创建一个导航属性,所以我可以写这样的东西?

EntitiesObject db = new EntitiesObject();
Job job = db.Jobs.SingleOrDefault(j => j.IdJob == 40);

List<StockType> stockTypes = job.StockTypes; // <<-----
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助Apo

Ger*_*old 2

很明显(从自我参考)它StockType2Jobs不仅包含 StockType 和 Job 的外键,因此您无法使用导航属性映射多对多关系job.StockTypesStockType所以除了通过收集之外你不能做任何其他事情job.StockType2Jobs。但这没什么大不了的:

List<StockType> stockTypes = job.StockType2Jobs.Select(x => x.StockType);
Run Code Online (Sandbox Code Playgroud)

您可能会想将其包装在未映射的属性中job.StockTypes,但通常这样做不是一个好主意。