使用EF:无效对象的弹性比例查询必须具有值



在Azure上,我设置了几个碎片数据库和一个带有外部表的弹性查询数据库,该数据库镜像碎片上的表。我使用的两个主要表是:

  1. 频道:
    • [name] nvarchary not null,
    • [id] [唯一识别器]不是null,
    • [externalReference] nvarchar null
  2. 用户:
    • [电子邮件] nvarchary not null,
    • [firstName] nvarchary not null,
    • [lastName] nvarchary not null,
    • [ChannelID] [唯一识别器]不是null,
    • [状态] [int]不是null,
    • [avatarid] [unique Iddentifier] null,
    • [id] [唯一识别器]不是null

当我通过EF和LINQ查询此问题时:

var user = db.users.include(" channel")。firstordEfault(u => u.email ==== " tony@soprano.com");

我有一个错误:

执行GlobalQuery操作时发生错误:无效对象必须具有一个值。

这是用户类的样子:

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查询:

从用户中选择 *从用户上的内在频道。Channelid= Channels.ID

给我相同的错误。

进一步的调查表明,将ID施放给独特的识别符(它们已经是)解决了问题:

从用户中选择 * cast(users.channelid作为唯一识别器)= cast(Channels.ID为unique IdentiDifier)

select *。

ChannelID和ID列已经是不可确定的唯一身份。碎片内的数据也有效,而不是零,那么这里的问题到底是什么?

另一个问题:我如何强制linq中的"投射到独特的识别器"?

快速问题,您指出"通过t-sql直接查询:从用户中选择 *内在连接频道。ChannelId= Channels.ID给我同样的错误。",您是从弹性查询头数据库中还是在碎片上查询?我设置了模式,在从碎片中查询时无法再现,所以我想知道我是否不重新读取问题正确?

相关内容

  • 没有找到相关文章

最新更新