我正在考虑将EF用于我将在未来几周内开始的项目。
我在之前创建的数据库中有三个表。 (请参阅附图)
创建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的实体,只返回:
子问题:我尝试过使用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();
}
但是我收到错误:
无效的匿名类型成员声明符。匿名类型成员必须 声明成员作业,简单名称或成员访问权。
答案 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的基础连接表: