У меня есть модель с столбцом в базе данных, определяемой как nvarchar (max) и хранение данных JSON. Ранее мы рассматривали это как простую строку в нашей сущности C#, но теперь я пытаюсь воспользоваться преимуществами картирования картирования столбцов EF Core 8, чтобы десериализировать его непосредственно в сильно напечатанный объект.public class WorkFlow
{
public WorkFlow()
{
Blocks = new List();
Connections = new List
();
}
[JsonPropertyName("workFlowId")]
public Guid WorkFlowId { get; set; }
[JsonPropertyName("blocks")]
public List Blocks { get; set; }
[JsonPropertyName("connections")]
public List Connections { get; set; }
}
< /code>
ef core 8 Конфигурация сопоставления: < /p>
public class LogicPointWorkFlowDetailConfiguration : IEntityTypeConfiguration
{
public void Configure(EntityTypeBuilder entity)
{
entity.OwnsOne(w => w.WorkFlow, navBuilder =>
{
navBuilder.ToJson();
navBuilder.OwnsMany(x => x.Connections, connectionsBuilder =>
{
connectionsBuilder.ToJson();
});
navBuilder.OwnsMany(x => x.Blocks, blocksBuilder =>
{
blocksBuilder.ToJson();
blocksBuilder.OwnsOne(b => b.View, viewBuilder =>
{
viewBuilder.ToJson();
viewBuilder.OwnsMany(x => x.PortInputs, portBuilder =>
{
portBuilder.ToJson();
});
viewBuilder.OwnsMany(x => x.PortOuts, portBuilder =>
{
portBuilder.ToJson();
});
});
});
});
}
}
Проблема
Когда я пытаюсь запрашивать свойство Blocks (например, используя. Any () в выражении LINQ), я сталкиваюсь с следующим исключением:
ansystem.nullrecement: an -not to anulfectexpectrecex: an -not to satexceptrecex: one an anulfectrecex: one an anulpectrecex. Объект.
Что я проверил
[*] JSON, хранящийся в базе данных, действителен и Desorialize Deserialized Owning EF Core
[*] workflow json включает в себя non-null blocks
[*] rakeflow json> nunull blocks
. Элементы < /li>
Модель и картирование EF, по -видимому, соответствуют структуре JSON < /li>
< /ul>
Вопросы < /strong> < /p>
- это известное ограничение или ошибку с EF Core 8 Support Json World? .Ownsmany () < /code> или как я структурирую вложенное картирование JSON? LogicPointWorkflowDetails Где есть столбец Workflow , и он работает. Я вижу свой рабочий процесс правильно опустошенной. var activeDetails = await ctx.LogicPointWorkFlowDetails
.Where(x => x.Status == Lms.UnifiedContextDb.Models.Enums.WorkFlowStatus.Active)
.ToListAsync();
, если я попытаюсь выполнить. any () в свойстве блоков рабочего процесса, я получаю исключение.var activeDetails1 = await ctx.LogicPointWorkFlowDetails
.Where(x => x.Status == Lms.UnifiedContextDb.Models.Enums.WorkFlowStatus.Active)
.Where(x => x.WorkFlow != null
&& x.WorkFlow.Blocks != null
&& x.WorkFlow.Blocks.Any(g => g.LogicPointWorkFlowBlockId != null
&& blockIds.Contains(g.LogicPointWorkFlowBlockId)))
.Select(x => x.WorkFlow)
.ToListAsync();
Подробнее здесь: https://stackoverflow.com/questions/797 ... eexception