Succinct
Как мне настроить производительность моих методов Linq To SQL DAL? В частности, объем передаваемых данных.
Многословный
У меня есть приложение Winform, которое использует Linq To Sql для доступа к своим данным. У нас есть 5 филиалов, 1 физически в том же месте, что и сервер SQL, а остальные 4 - на разных расстояниях и пропускной способности. Мое приложение - ваше типичное приложение Enterprise LOB CRUD. Вы ищете человека, выбираете его, а затем, когда вы выбираете элемент управления, скажем, Демография, он загружает демографию этого человека и отображает его на экране.
Я сохраняю только идентификаторы «ключевых камней», а затем выполняю вызовы БД с использованием этих первичных ключей. Это прекрасно работает в основном месте, с SQL Server на сайте. Тем не менее, ветви испытывают серьезную задержку загрузки некоторых элементов управления.
Это довольно типичный пример ( загрузка пользовательского элемента управления Сведения о пользователе ) моего DAL:
public static DataTable GetGeneralPersonInfo(int personID)
{
using (var context = ConnectDataContext.Create())
{
var generalPersonInfo = from person in context.tblPersons
where person.PersonID == personID
join addresse in context.tblAddresses.Where(a =>a.AddressTypeID == 'm') on person.PersonID equals
addresse.PersonID
select
new
{
person.PersonID,
person.FirstName,
person.MiddleName,
person.LastName,
person.SuffixID,
person.TitleID,
addresse.AddressLine1,
addresse.AddressLine2,
addresse.AddressLine3,
addresse.CityName,
addresse.StateID,
addresse.ZipCode,
addresse.ZipPlus,
addresse.DirectionsToAddress,
addresse.CountyID,
person.ResidencyCountyID,
person.ResponsibilityCountyID,
person.EmailAddress,
person.SSN,
person.Gender,
person.BirthDate,
person.DeathDate,
person.DriversLicenseNumber,
person.DriversLicenseStateID,
person.HispanicOriginFlag,
person.CitizenFlag,
person.VeteranFlag,
person.MaritalStatusID,
person.PrimaryRaceID,
person.SecondaryRaceID,
person.UpdateUserID,
person.UpdateDateTime,
person.InsertDateTime,
person.InsertUserID,
};
return generalPersonInfo.CopyLinqToDataTable();
}
}
Что-то явно не так?
Чтобы обеспечить дополнительное раскрытие, каждая таблица имеет uniqueidentifier
, то есть НЕ PK
. Кроме того, у меня есть очень широкие таблицы ( 60 + иногда столбцы ) с большими текстовыми полями ( varchar (500 - max) ).