Я использую VS2017, C #, EF 6.2.0. У меня есть запрос (показан ниже), который попадает в две разные базы данных. В одной базе данных хранится информация о сотрудниках, а в другой - данные об использовании пространства, которые читаются как: к каким офисам, лабораториям и т. Д. Имеет доступ Person-X?
Я могу запустить необработанный запрос в SSMS, заменив @PERSONID
на реальный personId
, и он работает. Когда я запускаю запрос с помощью метода ниже, он возвращает результат, но строка GroupName
всегда равна нулю.
Должен ли я сделать что-то особенное для строк?
public class PersonToMemberInfo
{
public long GroupId { get; set; }
public long PersonnelGroupId { get; set; }
public string GroupName { get; set; }
}
public List<PersonToMemberInfo> GetPersonMemberships(PersonnelContext pdb, long personId) {
try {
var personIdParam = new SqlParameter {
Value = personId,
DbType = DbType.Int64,
ParameterName = "PERSONID"
};
var myList = pdb.Database.SqlQuery<PersonToMemberInfo>(@"
SELECT DISTINCT
sGroup.GroupId,
sGroup.PersonnelGroupId,
sGroup.Name
FROM
Company.Personnel.Memberships AS Memberships
INNER JOIN
Space.dbo.Person AS Person ON Memberships.PersonId = Person.PersonnelPersonId
AND Person.PersonnelPersonId = @PERSONID
AND GETDATE() BETWEEN Person.StartDate AND isnull(Person.EndDate, GETDATE())
INNER JOIN
Space.dbo.[Group] AS sGroup ON Memberships.GroupId = sGroup.PersonnelGroupId
INNER JOIN
Space.dbo.GroupList AS GroupList ON sGroup.GroupId = GroupList.GroupId
AND GETDATE() BETWEEN GroupList.StartDate AND ISNULL(GroupList.EndDate, GETDATE())--
WHERE
GETDATE() BETWEEN Memberships.StartDate AND ISNULL(Memberships.EndDate, GETDATE());",
personIdParam).ToList();
return myList;
} catch (Exception e) {
throw new Exception("GetPersonMemberships: " + e.Message);
}
}