1

我想编写一个查询,为每个事件 () 显示与其相关的tbl_events所有对象 ( tbl_objects)(关系类型 - M:N)。

我对仅包含连接的 2 个表的外键的连接表(关联类)的表有疑问。

例如,与名为totbl_events的连接表连接。tbl_object_has_tbl_eventstbl_objects

这是连接表的结构:

tbl events has: eventID, eventName

tbl_object has: objectID, objectName

tbl_object_has_tbl_events: eventID, objectID

这是我试图写的:

IList dataList = (from dEvent in App.glidusContext.tbl_events.
                    join dObject in App.glidusContext.tbl_objects
                    on dEvent.tbl_objects equals dObject.objectID
                    select new { dEvent.eventName, dObject.objectName}).ToList();

我无法到达连接表tbl_object_has_tbl_events

我的问题是当我有 M:N 关系时如何实现这样的查询。

谢谢。

更新多对多关系的生成:

-- -----------------------------------------------------
-- Table tbl_events
-- -----------------------------------------------------
CREATE TABLE tbl_events (
    eventID INT NOT NULL IDENTITY,
    eventName NVARCHAR(100) NOT NULL,
    PRIMARY KEY (eventID));

-- -----------------------------------------------------
-- Table tbl_objects
-- -----------------------------------------------------
CREATE TABLE tbl_objects (
    objectID INT NOT NULL IDENTITY,
    objectName NVARCHAR(100) NOT NULL,
    PRIMARY KEY (objectID));

-- -----------------------------------------------------
-- Table tbl_objects_has_tbl_events
-- -----------------------------------------------------
CREATE TABLE tbl_objects_has_tbl_events (
    objectID INT NOT NULL,
    eventID INT NOT NULL,
    PRIMARY KEY (objectID, eventID),
    CONSTRAINT fk_tbl_objects_has_tbl_events_tbl_objects
        FOREIGN KEY (objectID)
            REFERENCES tbl_objects (objectID)
                ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT fk_tbl_objects_has_tbl_events_tbl_events
        FOREIGN KEY (eventID)
            REFERENCES tbl_events (eventID)
                ON DELETE CASCADE ON UPDATE CASCADE);
4

1 回答 1

1

实体数据模型不显示仅包含 FK 的表。因此,在您的情况下,Events 实体将具有导航属性 Objects,而您的 Object 实体将具有导航属性 Events。

因此,要获取您的信息,您可以编写如下查询:

IList dataList = (from dEvent in App.glidusContext.tbl_events
                  from dObject in dEvent.Objects
                    select new { dEvent.eventName, dObject.objectName}).ToList();
于 2011-02-18T17:37:07.733 回答