Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework IDBcommandInterceptor和DBDataReader上的EF_Entity Framework_Idbcommand - Fatal编程技术网

Entity framework IDBcommandInterceptor和DBDataReader上的EF

Entity framework IDBcommandInterceptor和DBDataReader上的EF,entity-framework,idbcommand,Entity Framework,Idbcommand,我试图在IDBcommandInterceptor 对于insert/update操作,它足够简单-我可以返回一个由单个字段或int组成的DbDataReader 但是,对于select操作,如果有一些“include”,那么sql结果的形状是非常漂亮的。。。棒极了 我怎样才能从 ReaderExecuting(DbCommand命令,DbCommandInterceptionContext结果的字段、名称和相应的实体 谢谢, 示例:尝试从Id中读取部门(Id,名称),包括在员工(Id,Name

我试图在
IDBcommandInterceptor
对于insert/update操作,它足够简单-我可以返回一个由单个字段或int组成的
DbDataReader
但是,对于select操作,如果有一些“include”,那么sql结果的形状是非常漂亮的。。。棒极了

我怎样才能从

ReaderExecuting(DbCommand命令,DbCommandInterceptionContext
结果的字段、名称和相应的实体

谢谢,

示例:尝试从Id中读取
部门(Id,名称),包括在员工(Id,Name.IDDepartment,DateModification,DateCreation,User)上的Id
获取包含的DBDataReader的命令如下所示

我想知道能够模拟的字段名称(如
C1
ID1
Name1
和其他)

SELECT 
    [Project2].[Id] AS [Id], 
    [Project2].[Name] AS [Name], 
    [Project2].[C1] AS [C1], 
    [Project2].[Id1] AS [Id1], 
    [Project2].[Name1] AS [Name1], 
    [Project2].[IDDepartment] AS [IDDepartment], 
    [Project2].[DateModification] AS [DateModification], 
    [Project2].[DateCreation] AS [DateCreation], 
    [Project2].[User] AS [User], 
    [Project2].[Archive] AS [Archive]
    FROM ( SELECT 
        [Limit1].[Id] AS [Id], 
        [Limit1].[Name] AS [Name], 
        [Extent2].[Id] AS [Id1], 
        [Extent2].[Name] AS [Name1], 
        [Extent2].[IDDepartment] AS [IDDepartment], 
        [Extent2].[DateModification] AS [DateModification], 
        [Extent2].[DateCreation] AS [DateCreation], 
        [Extent2].[User] AS [User], 
        [Extent2].[Archive] AS [Archive], 
        CASE WHEN ([Extent2].[Id] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C1]
        FROM   (SELECT TOP (1) 
            [Extent1].[Id] AS [Id], 
            [Extent1].[Name] AS [Name]
            FROM [dbo].[Department] AS [Extent1]
            WHERE [Extent1].[Id] = @p__linq__0 ) AS [Limit1]
        LEFT OUTER JOIN [dbo].[Employee] AS [Extent2] ON [Limit1].[Id] = [Extent2].[IDDepartment]
    )  AS [Project2]
    ORDER BY [Project2].[Id] ASC, [Project2].[C1] ASC

通过这样做,您应该能够从读者那里获得列名

var columns = Enumerable.Range(0, reader.FieldCount) .Select(reader.GetName).ToList();
在这种情况下,您只需要名称。如果您获得结果表的整个架构,您可以通过以下操作获得:

DataTable schemaTable = reader.GetSchemaTable();
然后遍历datatable中的行集合,以获取每列的属性


这有助于回答您的问题吗?

您在这里说的是如何将IDataReader转换为datatable。请重新阅读问题-我没有IDataReader-也不想对数据库运行DbCommand。