EF多对多加入 - 懒惰加载已禁用

时间:2013-03-01 16:36:19

标签: entity-framework linq-to-entities entity-framework-5 code-first entity-relationship

以下是我的情景:

public class Contact 
{
    public Guid ContactId { get; set; }
    ........
    public Guid WorkspaceId { get; set; }
    public Workspace Workspace { get; set; }
}

public class Workspace
{
    public Guid WorkspaceId { get; set; }
    ........
    public ICollection<Contact> ReferencedContacts { get; set; }
    public ICollection<Contact> OwnedContacts { get; set; }
}

逻辑如下:联系人不能存在于工作区外(意味着工作区拥有联系人)。 用户具有工作空间,并将“拥有的联系人”放入其中(拥有的联系人=联系人信息描述用户,例如职业,姓名,地址等)。 用户工作区也可以保存对其他用户拥有的联系人的引用(这里是连接表,它存储工作空间和引用的联系人之间的关系)。

public WorkspaceMap()
{
    ....
    HasMany(w => w.ReferencedContacts).WithMany().Map(mp =>
    {
        mp.ToTable("WorkspaceReferencedContacts");
        mp.MapLeftKey("WorkspaceId");
        mp.MapRightKey("ContactId");
        });
}

public ContactMap()
{
    ......
    HasRequired(c => c.Workspace).WithMany(w => w.OwnedContacts).HasForeignKey(c =>   c.WorkspaceId).WillCascadeOnDelete(false);
    Property(c => c.WorkspaceId).HasColumnName("WorkpaceId");
}

我要做的是使用查询方法获取特定工作区的所有引用联系人。查询的SQL版本如下:

SELECT * FROM dbo.Contacts c INNER JOIN dbo.WorkspaceReferencedContacts wc ON wc.ContactId = c.ContactId 在哪里wc.WorkspaceId = '57F685C0-428C-44C3-8708-F30B5AF34CAE';

我接近了很多方面但没有取得任何成功。 请注意,延迟加载已被禁用(没有必要讨论原因......)

1 个答案:

答案 0 :(得分:0)

  

...获取特定工作区的所有引用联系人...

我想:

var contacts = context.Workspaces
    .Where(w => w.WorkspaceId == "57F685C0-428C-44C3-8708-F30B5AF34CAE")
    .Select(w => w.ReferencedContacts)
    .SingleOrDefault();