【发布时间】:2022-08-20 04:20:25
【问题描述】:
到目前为止我发现的所有内容,如果您正在调用表值函数,则返回值必须是 IQueryable。例如:
public IQueryable<AlbumsByGenre> ufn_AlbumsByGenre_ITVF(int genreId)
=> FromExpression(() => ufn_AlbumsByGenre_ITVF(genreId));
大多数情况下,当我使用表值函数时,返回的表类型是 DTO。也就是说,它与数据库中的任何实际表都不匹配。这是一个例子:
CREATE FUNCTION dbo.ufn_AlbumsByGenre_ITVF(@GenreId int)
RETURNS TABLE
AS
RETURN(
SELECT
ar.ArtistName,
al.AlbumName,
g.Genre
FROM Genres g
INNER JOIN Albums al
ON g.GenreId = al.GenreId
INNER JOIN Artists ar
ON al.ArtistId = ar.ArtistId
WHERE g.GenreId = @GenreId
);
为返回类型创建实体会导致数据库中出现不必要的、未使用的和不需要的表。在本例中,表名是“AlbumsByGenre”。
有没有办法让返回类型成为未映射的类型以防止不必要的表?
-
仅当您使用迁移时,该表才会添加到数据库中。它没有有在那里,因为 EF 永远不会尝试直接查询它。我认为您甚至可以将其从生成的迁移脚本中删除(没有尝试,我尽量避免迁移)。
标签: c# entity-framework-core ef-core-6.0