无法在 LINQ to Entities 查询中构造实体或复杂类型 'FPSDB_newModel.Form_Attachment'
The entity or complex type 'FPSDB_newModel.Form_Attachment' cannot be constructed in a LINQ to Entities query
我正在使用 Entity Framework 数据库优先方法。当我想从数据库中提取数据时,我使用 GetForm_AttachmentByAppID 方法。当我从代码中调用此方法时,出现以下 运行 时间错误:
An exception of type 'System.NotSupportedException' occurred in EntityFramework.SqlServer.dll but was not handled in user code
Additional information: The entity or complex type 'FPSDB_newModel.Form_Attachment' cannot be constructed in a LINQ to Entities query.
public partial class Form_Attachment
{
public int Form_AttachmentID { get; set; }
public Nullable<int> AttachmentCategoryID { get; set; }
public int ApplicationID { get; set; }
public string EmployeeID { get; set; }
public string DocumentName { get; set; }
public string DocumentSize { get; set; }
public Nullable<byte> RoleID { get; set; }
public string Description { get; set; }
public Nullable<bool> SelectionForExtRev { get; set; }
public virtual Application Application { get; set; }
public virtual AttachmentCategory AttachmentCategory { get; set; }
public virtual Employee Employee { get; set; }
public virtual Role Role { get; set; }
}
上面的文件是自动生成的,代码在 FPSModel.cs 中,下面是我提取数据的代码
public List<Form_Attachment> GetForm_AttachmentByAppID(int applicationID)
{
var context = new FPSDB_newEntities();
var data = (from f in context.Form_Attachment
where
(
f.ApplicationID== applicationID
)
select new Form_Attachment
{
Form_AttachmentID = f.Form_AttachmentID,
AttachmentCategoryID = f.AttachmentCategoryID,
EmployeeID = f.EmployeeID,
ApplicationID = f.ApplicationID,
DocumentName = f.DocumentName,
DocumentSize = f.DocumentSize,
RoleID = f.RoleID,
Description = f.Description,
SelectionForExtRev = f.SelectionForExtRev
}).ToList();
return data;
}
这里还有我的 table Form_Attachments
的数据库定义
CREATE TABLE [dbo].[Form_Attachment](
[Form_AttachmentID] [int] IDENTITY(1,1) NOT NULL,
[AttachmentCategoryID] [int] NULL,
[ApplicationID] [int] NOT NULL,
[EmployeeID] [varchar](10) NOT NULL,
[DocumentName] [nvarchar](500) NULL,
[DocumentSize] [nvarchar](50) NULL,
[RoleID] [tinyint] NULL,
[Description] [ntext] NULL,
[SelectionForExtRev] [bit] NULL,
CONSTRAINT [PK_Form_AttachmentID] PRIMARY KEY CLUSTERED
(
[Form_AttachmentID] 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]
我读过这个The Projection should not be on to a mapped entity
所以如果我制作一个 class Form_Attachments1 就像自动生成的 Form_Attachments 那么它会是数据传输对象 DTO,这是正确的方法吗?
你可以试试这个:
public List<Form_Attachment> GetForm_AttachmentByAppID(int applicationID)
{
var context = new FPSDB_newEntities();
var data = (from f in context.Form_Attachment
where
(
f.ApplicationID== applicationID
)
select f).ToList();
return data;
}
或者这个:
data = context.Form_Attachment.Where(p => p.ApplicationID == applicationID).ToList();
我现在无法测试,但这应该可以。您不需要映射,因为 'f' 意味着您的 'Form_Attachment' 实体已经 class。如果您正在使用像 'Form_AttachmentDto' 这样的 DTO class,那么您需要像这样映射它:
public List<Form_AttachmentDto> GetForm_AttachmentByAppID(int applicationID)
{
var context = new FPSDB_newEntities();
var data = (from f in context.Form_Attachment
where
(
f.ApplicationID== applicationID
)
select f).Select(p=>new Form_AttachmentDto()
{
//...
// here comes the mapping code
//..
}
).ToList();
return data;
}
我正在使用 Entity Framework 数据库优先方法。当我想从数据库中提取数据时,我使用 GetForm_AttachmentByAppID 方法。当我从代码中调用此方法时,出现以下 运行 时间错误:
An exception of type 'System.NotSupportedException' occurred in EntityFramework.SqlServer.dll but was not handled in user code Additional information: The entity or complex type 'FPSDB_newModel.Form_Attachment' cannot be constructed in a LINQ to Entities query.
public partial class Form_Attachment
{
public int Form_AttachmentID { get; set; }
public Nullable<int> AttachmentCategoryID { get; set; }
public int ApplicationID { get; set; }
public string EmployeeID { get; set; }
public string DocumentName { get; set; }
public string DocumentSize { get; set; }
public Nullable<byte> RoleID { get; set; }
public string Description { get; set; }
public Nullable<bool> SelectionForExtRev { get; set; }
public virtual Application Application { get; set; }
public virtual AttachmentCategory AttachmentCategory { get; set; }
public virtual Employee Employee { get; set; }
public virtual Role Role { get; set; }
}
上面的文件是自动生成的,代码在 FPSModel.cs 中,下面是我提取数据的代码
public List<Form_Attachment> GetForm_AttachmentByAppID(int applicationID)
{
var context = new FPSDB_newEntities();
var data = (from f in context.Form_Attachment
where
(
f.ApplicationID== applicationID
)
select new Form_Attachment
{
Form_AttachmentID = f.Form_AttachmentID,
AttachmentCategoryID = f.AttachmentCategoryID,
EmployeeID = f.EmployeeID,
ApplicationID = f.ApplicationID,
DocumentName = f.DocumentName,
DocumentSize = f.DocumentSize,
RoleID = f.RoleID,
Description = f.Description,
SelectionForExtRev = f.SelectionForExtRev
}).ToList();
return data;
}
这里还有我的 table Form_Attachments
的数据库定义CREATE TABLE [dbo].[Form_Attachment](
[Form_AttachmentID] [int] IDENTITY(1,1) NOT NULL,
[AttachmentCategoryID] [int] NULL,
[ApplicationID] [int] NOT NULL,
[EmployeeID] [varchar](10) NOT NULL,
[DocumentName] [nvarchar](500) NULL,
[DocumentSize] [nvarchar](50) NULL,
[RoleID] [tinyint] NULL,
[Description] [ntext] NULL,
[SelectionForExtRev] [bit] NULL,
CONSTRAINT [PK_Form_AttachmentID] PRIMARY KEY CLUSTERED
(
[Form_AttachmentID] 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]
我读过这个The Projection should not be on to a mapped entity 所以如果我制作一个 class Form_Attachments1 就像自动生成的 Form_Attachments 那么它会是数据传输对象 DTO,这是正确的方法吗?
你可以试试这个:
public List<Form_Attachment> GetForm_AttachmentByAppID(int applicationID)
{
var context = new FPSDB_newEntities();
var data = (from f in context.Form_Attachment
where
(
f.ApplicationID== applicationID
)
select f).ToList();
return data;
}
或者这个:
data = context.Form_Attachment.Where(p => p.ApplicationID == applicationID).ToList();
我现在无法测试,但这应该可以。您不需要映射,因为 'f' 意味着您的 'Form_Attachment' 实体已经 class。如果您正在使用像 'Form_AttachmentDto' 这样的 DTO class,那么您需要像这样映射它:
public List<Form_AttachmentDto> GetForm_AttachmentByAppID(int applicationID)
{
var context = new FPSDB_newEntities();
var data = (from f in context.Form_Attachment
where
(
f.ApplicationID== applicationID
)
select f).Select(p=>new Form_AttachmentDto()
{
//...
// here comes the mapping code
//..
}
).ToList();
return data;
}