LINQ to SQL DataContext.Translate и свойства с именем, отличным от исходного - PullRequest
6 голосов
/ 17 октября 2008

Я работаю с некоторыми таблицами, где я хочу, чтобы класс C # имел имя свойства, отличное от столбца базовой таблицы. Однако, когда я использую метод Translate для чтения результатов, свойства, которые не соответствуют имени источника, никогда не заполняются. Даже когда я использую Linq для генерации SQL.

Например, моя таблица определена в БД следующим образом:

CREATE TABLE User_Entry (
    UserId int IDENTITY (1, 1) NOT NULL,
    Login_Id varchar (50) NOT NULL,
    Active char(1) NOT NULL,
    PASSWORD varchar(75) NULL
)

Вот класс, на который он отображается (сгенерированный дизайнером LINQ ... Атрибуты LINQ и другие вещи, оставленные для краткости):

public partial class User
{
    int UserId;
    string Login;
    string Active,
    string Pwd
}

Когда я делаю следующее, свойства Login и Pwd не заполняются, а свойства UserId и Active.

Data.DbContext db = new Data.DbContext();

IQueryable query = db.Users.Where(usr => usr.Login == request.LoginString);

SqlCommand cmd = (SqlCommand)data.GetCommand(query);

... execute the command (asynchronously) ...

User user = db.Translate<User>( dataReaderResult ).FirstOrDefault();

! На этом этапе я проверяю объект пользователя и вижу, что столбцы Login и Pwd не заполнены!

Вот sql, который был сгенерирован:

exec sp_executesql N'SELECT [t0].[UserID] AS [UserId], [t0].[Login_ID] AS [Login], [t0].[Active], [t0].[PASSWORD] AS [Pwd]
FROM [dbo].[User_Entry] AS [t0]
WHERE [t0].[Login_ID] = @p0', N'@p0 varchar(13)', @p0 = 'test_user'

Первоначально, когда столбец UserId имел другое имя свойства, я получал исключение The required column [UserId] does not exist in the results. Я оглянулся и увидел ответ от некоторых людей из MSFT, которые сказали, что это ошибка.

Это связано? Было ли это когда-нибудь исправлено? Кто-нибудь знает, когда это будет исправлено?

Редактировать: Дополнительная информация.

Ошибка, с которой я думаю, связана с комментарием Кэти Лу MSFT от 14 августа 2007 года здесь , где она говорит:

Спасибо за сообщение об этой проблеме. По вашей проблеме мы смогли воспроизвести проблему, и команда разработчиков изучает соответствующую сортировку и решение.

Мне интересно, связано ли это с тем, что я испытываю, и могу ли я получить больше информации об этом. Я искал linq translate site:connect.microsoft.com, но ничего не нашел.

Ответы [ 2 ]

1 голос
/ 20 апреля 2010

Ошибка, с которой я думаю, связана с комментарием Кэти Лу MSFT от 14 августа 2007 года, где она говорит: «Спасибо за сообщение об этой проблеме. Из вашей проблемы мы смогли воспроизвести проблему, и команда разработчиков изучает соответствующая сортировка и разрешение. " от https://forums.microsoft.com/msdn/ShowPost.aspx?PostID=1983746&SiteID=1&pageid=0

Мне интересно, связано ли это с тем, что я испытываю, и могу ли я получить больше информации об этом. Я искал (linq translate site: connect.microsoft.com), но ничего не нашел.

1 голос
/ 17 октября 2008

Правильно ли установлены атрибуты столбца? Есть имя свойства.

http://msdn.microsoft.com/en-us/library/system.data.linq.mapping.columnattribute_members.aspx

Кроме того, Документация по переводу ... вы хотите отобразиться (как в первом пункте маркера).


Алгоритм сопоставления столбцов в результате с полями и свойствами в объекте работает следующим образом:

  • Если поле или свойство сопоставлено с конкретным именем столбца, это имя столбца ожидается в наборе результатов.
  • Если поле или свойство не сопоставлено, в результирующем наборе ожидается столбец с тем же именем, что и у поля или свойства.
  • Сравнение выполняется путем поиска совпадения с учетом регистра в первую очередь. Если это совпадение не найдено, то выполняется поиск совпадения без учета регистра.

Ой, подождите, вы используете общую перегрузку Translate. Попробуйте перегрузку Translate с помощью параметра Type и посмотрите, подходит ли вам это лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...