1

На Azure у меня есть настройка нескольких оштукатуренных баз данных и эластичной базы запросов запросов с внешними таблицами, отражающими таблицы на осколках. Два основных таблиц, которые я использую:Запрос эластичной шкалы с EF: нулевой объект должен иметь значение

  1. Каналы:
    • [Имя] NVARCHAR NOT NULL,
    • [Id] [UniqueIdentifier] NOT NULL,
    • [ExternalReference] NVARCHAR NULL
  2. Пользователи:
    • [Email] NVARCHAR NOT NULL,
    • [FirstName] NVARCHAR NOT NULL,
    • [LastName] NVARCHAR NOT NULL,
    • [ChannelId] [UniqueIdentifier] NOT NULL,
    • [Status] [INT] NOT NULL,
    • [AvatarId] [UniqueIdentifier] NULL,
    • [Id] [UniqueIdentifier] NOT NULL

Когда я запрашиваю это с помощью EF и LINQ:

var user = db.Users.Include("Channel").FirstOrDefault(u => u.Email == "[email protected]");

Я получаю сообщение об ошибке:

An error occurred while executing GlobalQuery operation: Nullable object must have a value.

Это то, что выглядит класс пользователя как:

public class User 
{ 
    public Guid Id { get; set; } = SequentialGuid.NewGuid(); 
    [Required] 
    public string Email { get; set; } 
    [Required] 
    public string FirstName { get; set; }  
    [Required]  
    public string LastName { get; set; } 
    [Index] 
    public Status Status { get; set; } 
    public Guid? AvatarId { get; set; } 
    [Index] 
    public Guid ChannelId { get; set; } 
    [ForeignKey("ChannelId")] 
    public virtual Channel Channel { get; set; } 
} 

запрашивая непосредственно через T-SQL:

SELECT * FROM Users INNER JOIN Channels ON Users.ChannelId = Channels.Id

дает мне такая же ошибка.

Дальнейшее исследование показывает, что отливку Ids к uniqueidentifiers (что они уже есть) решает эту проблему:

SELECT * FROM Users INNER JOIN Channels ON CAST(Users.ChannelId as uniqueidentifier) = CAST(Channels.Id as uniqueidentifier)

Столбцы ChannelId и Id являются уже не обнуляемых uniqueidentifiers. Данные внутри осколков также действительны и не равны нулю, так что же здесь проблема?

Другой вопрос: как я могу заставить этот «cast to uniqueidentifier» в linq?

+0

Можете ли вы показать класс, в котором вы сохраняете каждую строку из результата запроса? –

ответ

0

Быстрый вопрос: «Запросить напрямую через T-SQL: SELECT * FROM Пользователи INNER JOIN Channels ON Users.ChannelId = Channels.Id дает мне ту же ошибку». , запрашиваете ли вы из базы данных Elastic Query Head или на осколке? Я настраиваю схему и не могу воспроизвести ее при запросе из осколка, поэтому мне интересно, не правильно ли я неправильно воспроизвожу проблему?

+0

Я получаю сообщение об ошибке, если я запрашиваю базу данных Elastic Query Head. Если тот же запрос выполняется на осколке, я не получаю ошибку. – SVC