我有一个简单的模型
[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: 在“FromSql”操作的结果中未出现所需的列“InterfaceID”。
我在其他类似于此方法的地方使用了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]
更新
我已经查看了EF生成的SQL:
SELECT [i].[InterfaceTypeId], [i].[Description], [i].[InterfaceID] FROM [Control].[InterfaceType] AS [i]
它从哪里获取InterfaceID?
FromSql
呢? - Crowcoder[Interfaces].[Control].[InterfaceType]
选择列,而不是从[Control].[InterfaceType]
选择呢? - Viktors Telle