でなければなりません。Azureでは、いくつかのシャードされたデータベースとシャードのテーブルをミラーリングする外部テーブルを備えた弾性クエリデータベースが用意されています。私が使用する2つの主要なテーブルは以下のとおりです。EFを使用した弾性スケールクエリ:Nullableオブジェクトの値は
- チャンネル:
- [名前] nvarchar型、NOT NULL、
- [ID] [UNIQUEIDENTIFIER] NOT NULL、
- [ExternalReference] nvarchar型のNULL
- ユーザー:
- [メール] nvarchar型NOT NULL、
- [姓] nvarchar型、NOT NULL、
- [姓] nvarchar型、NOT NULL、
- [ChannelId] [UNIQUEIDENTIFIER] NOT NULL、
- [状態]の[int]は、NOT NULL、
- [AvatarId] [UNIQUEIDENTIFIER] NULL、
- [ID] [UNIQUEIDENTIFIER]、NOT NULL
私はEFとLINQを経由して、これを照会:
var user = db.Users.Include("Channel").FirstOrDefault(u => u.Email == "[email protected]");
私はエラーを取得する:T-SQLを経由して直接照会
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; }
}
:
An error occurred while executing GlobalQuery operation: Nullable object must have a value.
これは、Userクラスがどのように見えるかです
SELECT * FROM Users INNER JOIN Channels ON Users.ChannelId = Channels.Id
ができます私は同じエラーです。
SELECT * FROM Users INNER JOIN Channels ON CAST(Users.ChannelId as uniqueidentifier) = CAST(Channels.Id as uniqueidentifier)
ChannelId列およびID列がすでに非NULL可能uniqueidentifiersです:
詳しい調査の結果、(彼らはすでにある)uniqueidentifiersへのIdsをキャストしても問題が解決することを示しています。シャード内のデータも有効で、nullではないので、ここで問題となるのは何ですか?
もう1つの質問:どうすればlinqの 'uniqueidentifier'にキャストすることができますか?
クエリの結果から各行を保存するクラスを表示できますか? –