使用实体框架映射两个以上的表

时间:2011-11-21 17:38:14

标签: asp.net entity-framework

我正在考虑将EF用于我将在未来几周内开始的项目。

我在之前创建的数据库中有三个表。 (请参阅附图)EDMX

创建CompanyNotice记录时,必须至少将一个位置(从Locations表中)添加到CompanyNoticeLocations表中。

e.g。

**CompanyNotice**
ID  CompanyID Date                      Heading Text   .....
2   9         2011-11-21 10:17:29.573   Lorem   Ipsum   1   1   1

**CompanyNoticeLocations**
CompanyNoticeLocationsID CompanyNoticeID LocationID
1                        2               4
2                        2               5
3                        2               1

主要问题: 任何人都可以告诉我,如果我可以使用EF创建一个名为:CompanyNoticesWithLocations的实体,只返回:

  • 标题
  • 文本
  • LocationNames列表

子问题:我尝试过使用LINQ而不使用多表到实体映射,我无法使用它:

using (var context = new ALEntities())
                {
                    var query = from c in context.CompanyNotices.Include("Locations")
                                select new 
                                { 
                                    c.CompanyNoticeHeading, 
                                    c.CompanyNoticeText,
                                    (from l in c.CompanyNoticesLocations select l.Location.LocationName)
                                };
                    ASPxGridView1.DataSource = query;
                    ASPxGridView1.DataBind();



                }

但是我收到错误:

  

无效的匿名类型成员声明符。匿名类型成员必须   声明成员作业,简单名称或成员访问权。

2 个答案:

答案 0 :(得分:1)

这对我有用

var query = from c in context.CompanyNotices.Include("Locations") 
                                select new  
                                {  
                                    c.CompanyNoticeHeading,  
                                    c.CompanyNoticeText, 
                                    locations = (from l in c.CompanyNoticesLocations select l.Location.LocationName) 
                            }; 

其中,location是匿名类型的属性名称..

答案 1 :(得分:1)

您的CompanyNoticesLocation表不需要作为模型中的单独实体存在。这应该表示为CompanyNotice和Location之间的多对多关联。只要正确设置了关联,EF就会将其映射到您可以在“映射”窗口中看到的基础连接表。

以下是我自己的一个模型中多对多映射的示例,显示了关联映射到名为CandidateAnswer的基础连接表:

enter image description here