1

这是我的场景:

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 WHERE wc.WorkspaceId = '57F685C0-428C-44C3-8708-F30B5AF34CAE';

我已经尝试了很多方法,但都没有成功。请注意延迟加载被禁用(没有必要讨论为什么......)

4

1 回答 1

0

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

我认为:

var contacts = context.Workspaces
    .Where(w => w.WorkspaceId == "57F685C0-428C-44C3-8708-F30B5AF34CAE")
    .Select(w => w.ReferencedContacts)
    .SingleOrDefault();
于 2013-03-01T16:57:45.927 回答