5

我在 Visual Studio 中使用实体框架向导创建了一个 db-model。有 2 个表(job、stocktype)与表 stocktype2job 相互关联。

在此处输入图像描述

Job <------- no direct relation / navigation property --------> StockType
 |                                                                  |
 |                                                                  |
 ---------------------> StockType2Job ----------------------------->

使用作业对象,我可以做这样的事情......

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);
    }

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

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

List<StockType> stockTypes = job.StockTypes; // <<-----

谢谢你的帮助阿波

4

2 回答 2

2

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

List<StockType> stockTypes = job.StockType2Jobs.Select(x => x.StockType);

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

于 2012-12-14T12:55:25.687 回答
1

尝试这样的事情:

 var stocksTypes = from st in db.StockType 
     from stj in st.StockType2Job where stj.Job.IdJob==40 select st;
  • 此代码没有创建任何新的导航属性,它只是“加入”表格。我认为 StockType2Jobs 表的存在是有充分理由的。

我建议你看看如何处理与 EF 的 N 对 N 关系。

一些链接[1] [2]

希望有帮助

于 2012-12-14T10:53:23.423 回答