【问题标题】:Entity Framework - Create navigation property实体框架 - 创建导航属性
【发布时间】:2012-12-14 10:07:14
【问题描述】:

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

感谢您的热心帮助 载脂蛋白

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      试试这样的:

       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,但无论如何,谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      • 2016-05-29
      相关资源
      最近更新 更多