Какой SQL генерирует nHibernate, когда мы сравниваем обнуляемый столбец БД с Nullable <T>? - PullRequest
0 голосов
/ 26 сентября 2019

Если у меня есть столбец, который можно обнулять:

CREATE TABLE SometTable(CanBeNull INT);

И я запрашиваю с помощью nHibernate:

int? i = null;
context.Query<SomeTable>().Where(CanBeNull == i);

int? i = 2;
context.Query<SomeTable>().Where(CanBeNull == i);

В этих двух запросах первый возвращает только те записи, в которых CanBeNullравно нулю, а вторая возвращает записи, где CanBeNull = 2?

Любопытно узнать, нужно ли мне добавлять дополнительный код для фактора, когда мой обнуляемый равен нулю, потому что я хочу, чтобы база данных NULL указывала (видимая для всех) и значение в этой строке, чтобы указывать (видимая только длячеловек с идентификатором X)

Data, VisibleTo
abcd, NULL --visible to anyone
efgh, 123  --visible only to id 123

И я хочу, чтобы мой c # null означал «идентификатор человека не был передан», поэтому, если i равен нулю, я покажу только abcd, а если i =123, тогда я покажу обе строки

Следовательно, я мог бы либо:

//if NH will emit `IS NULL` or `=@p0` accordingly
.Where(r => r.VisibleTo == null || r.VisibleTo == i);

//if NH will naively emit `=@p0` and set `@p0=null` where `i` is null
.Where(r => r.VisibleTo == null || (i.HasValue && r.VisibleTo == i.Value));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...