Entity Framework - 创建导航属性

5
我在Visual Studio中使用实体框架向导创建了一个数据库模型。有两个表(job,stocktype),它们通过表stocktype2job相互关联。

enter image description here

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; // <<-----

感谢您的善意帮助,Apo。
2个回答

2

从自我参照中可以清楚地看出,StockType2Jobs不仅包含对StockType和Job的外键,因此您无法使用导航属性job.StockTypes来映射多对多关系。因此,您只能通过job.StockType2Jobs收集StockType。但这并不是什么大问题:

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

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


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]

希望能有所帮助。


毫无疑问这会起作用,但当有更优雅的方式时,我宁愿不使用LINQ,不过还是谢谢! - Simon Rossmann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接