У меня есть простая модель
[Table("InterfaceType")]
public class InterfaceType
{
[Key]
public int InterfaceTypeId { get; set; }
public string Description { get; set; }
}
и в моем DbContext
public DbSet<InterfaceType> InterfaceTypes { get; set; }
и в моем контроллере
List<InterfaceType> types = _context.InterfaceTypes.FromSql(
"SELECT * FROM [Interfaces].[Control].[InterfaceType]").ToList();
, который возвращает ошибку:
InvalidOperationException: обязательный столбец InterfaceID не присутствовал в результатах операции FromSql.
Я использую FromSql в других методах, аналогичных этому, безпроблема, хотя эти модели содержат InterfaceId.Почему эта операция ожидает InterfaceId, когда его нет в модели.Я также пробовал ниже с тем же результатом.
List<InterfaceType> types = _context.InterfaceTypes.FromSql(
"SELECT InterfaceTypeId, Description FROM [Interfaces].[Control].[InterfaceType]").ToList();
Я также пытался:
interfacesOverview.SelectedInterface.InterfaceTypes = _context.InterfaceTypes.ToList();
После объявления через API:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<InterfaceType>().ToTable("InterfaceType", "Control");
}
с тем же результатом.
Для ясности вот таблица в MSSQL:
CREATE TABLE [Control].[InterfaceType](
[InterfaceTypeId] [tinyint] NOT NULL,
[Description] [varchar](25) NULL,
CONSTRAINT [PK_InterfaceType] PRIMARY KEY CLUSTERED
(
[InterfaceTypeId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
ОБНОВЛЕНИЕ
Я смотрел на SQL, который генерирует EF:
SELECT [i].[InterfaceTypeId], [i].[Description], [i].[InterfaceID] FROM [Control].[InterfaceType] AS [i]
Откуда он получает InterfaceID?