Неуникальные столбцы в запросе NHibernate - PullRequest
0 голосов
/ 01 октября 2018

У меня есть следующий случай:
В базе данных SqlServer есть две таблицы, определенные следующим образом:

CREATE TABLE [dbo].[T1](
    [c1] [nvarchar](50) NOT NULL,
    [c2] [int] NULL,
CONSTRAINT [PK_T1] PRIMARY KEY CLUSTERED ([c1] ASC)) ON [PRIMARY]

CREATE TABLE [dbo].[T2](
    [c1] [nvarchar](50) NOT NULL,
    [c2] [int] NULL,
CONSTRAINT [PK_T2] PRIMARY KEY CLUSTERED ([c1] ASC)) ON [PRIMARY]

Я добавляю одну запись в T1, а другую в T2, например:

INSERT INTO [dbo].[T1] ([C1],[C2]) VALUES ('a', 1)
INSERT INTO [dbo].[T2] ([C1],[C2]) VALUES ('a', 2)

Затем я выполняю следующий код C # (где Session - сеанс NHibernate):

var data = Session.CreateSQLQuery("SELECT * FROM T1 JOIN T2 ON T1.C1 = T2.C1").List();

В «data» я получаю одну запись с четырьмя столбцами.Значения следующие: «a», 1, «a», 1.

Если я выполняю запрос вручную в Sql Server Management Studio, я получаю хорошие результаты «a», 1, «a», 2.По какой-то причине NHibernate не может различать столбцы с одинаковыми именами или псевдонимами.

Кто-нибудь знает, как, если есть способ заставить эту работу?Я не могу гарантировать использование уникальных псевдонимов вместо *, мне также нужно использовать необработанный запрос вместо сопоставления объектов.В настоящее время мой единственный обходной путь - использовать старый добрый набор данных без NHibernate.Буду очень признателен за все предложения и помощь:)

1 Ответ

0 голосов
/ 02 октября 2018

Если ваша таблица была сопоставлена ​​с классом, и вы просто хотели все ("*") сопоставленные свойства, вы могли бы

var data = Session.CreateSQLQuery("SELECT {T1.*},{T2.*} FROM T1 JOIN T2 ON T1.C1 = T2.C1")
   .AddEntity("T1", typeof(TheClass))
   .AddEntity("T2", typeof(TheClass))
   .List();

Если нет, я думаю, что вам лучше всего использовать "старый добрый"набор данных "или устройство чтения данных, но вы можете представить его как метод расширения в ISession, чтобы сделать управление соединением и т. д. прозрачным.

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