以下是我的情景:
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';
我接近了很多方面但没有取得任何成功。 请注意,延迟加载已被禁用(没有必要讨论原因......)。
答案 0 :(得分:0)
...获取特定工作区的所有引用联系人...
我想:
var contacts = context.Workspaces
.Where(w => w.WorkspaceId == "57F685C0-428C-44C3-8708-F30B5AF34CAE")
.Select(w => w.ReferencedContacts)
.SingleOrDefault();