Я пытаюсь использовать ASP. NET Core для чтения из базы данных SQL. Я использую Microsoft.EntityFrameworkCore.DbContext, и он работает, за исключением любых таблиц, имеющих столбец XML
. При попытке чтения из одной из этих таблиц я получаю следующую ошибку:
System.InvalidOperationException
HResult=0x80131509
Message=The entity type 'SqlXml' requires a primary key to be defined. If you intended to use a keyless entity type call 'HasNoKey()'.
Я знаю, что речь не идет о моей модели, поскольку у нее есть первичный ключ. Кажется, речь идет о классе SqlXml.
Как я могу построить модель данных для привязки к таблице SQL со столбцом XML?
DBContext
public class HistoryContext : DbContext
{
public HistoryContext(DbContextOptions<HistoryContext> options) : base(options)
{
}
public DbSet<ShWorkflowRunsModel> shWorkflowRuns { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<ShWorkflowRunsModel>().ToTable("sh_workflowRuns");
}
}
Модель
public class ShWorkflowRunsModel
{
[Key]
public Int64 runId { get; set; }
public Guid serviceId { get; set; }
public string serviceName { get; set; }
public Guid workflowId { get; set; }
public SqlXml workflowConfig { get; set; }
public DateTime startTime { get; set; }
public DateTime endTime { get; set; }
public bool isScheduled { get; set; }
public string errorMessage { get; set; }
public bool hasErrorCounters { get; set; }
}
Контроллер
public class WorkflowController : Controller
{
private HistoryContext _context;
public WorkflowController(HistoryContext context)
{
_context = context;
}
public IActionResult History(string workflowId)
{
List<ShWorkflowRunsModel> model = GetShWorkflowRuns(workflowId);
return View(model);
}
public List<ShWorkflowRunsModel> GetShWorkflowRuns(string workflowId)
{
return _context.shWorkflowRuns.Where(wr => wr.workflowId.ToString() == workflowId).ToList();
}
}
}
Определение таблицы SQL
CREATE TABLE [dbo].[sh_workflowRuns](
[runId] [bigint] IDENTITY(1,1) NOT NULL,
[serviceId] [uniqueidentifier] NOT NULL,
[serviceName] [nvarchar](1024) NULL,
[workflowId] [uniqueidentifier] NOT NULL,
[workflowConfig] [xml] NOT NULL,
[startTime] [datetime] NULL,
[endTime] [datetime] NULL,
[isScheduled] [bit] NULL,
[errorMessage] [nvarchar](1024) NULL,
[hasErrorCounters] [bit] NULL,
CONSTRAINT [PK_sh_workflowRuns] PRIMARY KEY CLUSTERED
(
[runId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация