【发布时间】:2016-09-26 20:07:52
【问题描述】:
我有两张桌子:
- 公司
- 具有一对多关系的联系人(一个公司中有多个联系人)
联系人表已编辑:
public class Contact
{
public Guid Id { get; set; }
public DateTime dateCreated { get; set; }
public DateTime updated { get; set; }
public Boolean hidden { get; set; }
//Personal Data
public string title { get; set; }
public string jobTitle { get; set; }
public string firstName { get; set; }
public string lastName { get; set; }
public string department { get; set; }
public string email { get; set; }
public string logoUrl { get; set; }
public string personalRemarks { get; set; }
//Telephone list
public ICollection<Phone> Phones { get; set; }
//Addresses
public ICollection<Address> Addresses { get; set; }
//Bank Data
public ICollection<Bankdata> Bankdatas { get; set; }
//Tags
public ICollection<Tag> Tags { get; set; }
}
}
公司表已编辑:
public class Organization
{
public Guid Id { get; set; }
public DateTime dateCreated { get; set; }
public DateTime dateUpdated { get; set; }
public Boolean hidden { get; set; }
//Company Data
public string organizationName { get; set; }
public string taxId { get; set; }
public string trades { get; set; }
public string organizationType { get; set; }
public string actionRadius { get; set; }
public string organizationRemarks { get; set; }
public string web { get; set; }
//Contacts
public ICollection<Contact> Contacts { get; set; }
//Tags
public ICollection<Tag> Tags { get; set; }
}
}
我有一种方法可以在我的存储库中选择一家公司的所有联系人
public Organization GetOrganizationById(Guid Id)
{
return _context.Organizations
.Include(c => c.Contacts)
.Where(c => c.Id == Id)
.FirstOrDefault();
}
但由于我只有公司 ID,因此我需要在两个表之间进行连接以获得名称。比如:
SELECT contacts,*, Organization.name
FROM contacts
INNER JOIN Organization ON Organization.id = Contacts.organization_id
WHERE Organization.id = id;
我尝试了以下方法但没有成功:
public Organization GetOrganizationById(Guid Id)
{
return _context.Organizations
.Include(o => o.organizationName)
.Include(c => c.Contacts)
.Where(c => c.Id == Id)
.FirstOrDefault();
}
欢迎任何帮助
【问题讨论】:
-
你在使用Entity Framework Code-first吗?
-
是的,我遵循代码优先方法。我创建了这些类,然后使用 EntityFramework 来生成我的数据库。我的联系人表确实有一个“organizationId”列。但是,我在此处粘贴的代码不会带回该列。而且那一点我不知道如何添加带有公司名称的“选择”语句
-
但您的模型并未反映您的查询。根据您的查询,您应该在
Contact模型上拥有OrganizationId属性。此外,为了能够使用Include,您应该拥有navigation properties,例如public virual ICollection<Contact> Contacts { get; set; } -
对不起,为了节省空间,我没有完整地发布它。我现在会更新它但是,Organizationid 列只是在数据库中,而不是在我的模型中
-
Include方法用于加载相关数据。 相关数据表示导航属性。您不能将其与organizationName等普通属性一起使用。您问题中GetOrganizationById方法的第一种形式应该可以正常工作。当您使用FirstOrDefault加载数据时,它会加载所有属性,包括organizationName
标签: mysql linq asp.net-web-api