实体框架 - 创建导航属性

时间:2012-12-14 10:07:14

标签: c# sql visual-studio entity-framework

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

enter image description here

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

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

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

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

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

感谢您的帮助 APO

2 个答案:

答案 0 :(得分:2)

很明显(来自自引用)StockType2Jobs不仅包含StockType和Job的外键,因此您无法使用导航属性job.StockTypes映射多对多关系。因此,您无法执行任何其他操作,然后通过StockType收集job.StockType2Jobs。但这不是什么大问题:

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

你可能想把它包装在一个未映射的属性job.StockTypes中,但通常这不是一个好主意。

答案 1 :(得分: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]

希望帮助