我正在使用 EntityDataSource。当我将“选择”属性留空时,一切正常 - 在 SomeWebControl_DataBinding 中,我可以完美地将 GridRow 的 DataItem 转换为我的实体(我们称之为用户)。
Literal ctrlTime = (Literal)sender;
GridViewRow row = (GridViewRow)ctrlTime.NamingContainer;
USERS usersRow = (USERS)row.DataItem;
DateTime timestamp = usersRow.Time;
但是,我只需要显示表的第 1 1000 行,所以我要做的是填充 EntityDataSource 的“Select”属性并将其设置为“TOP(1000) |实体中所有字段的列表|”。但只要我这样做
USERS usersRow = (USERS)row.DataItem;
惨遭失败,告诉我它无法从 MaterializedDataRecord 转换为 USERS。
我最终做的是:
Literal ctrlTime = (Literal)sender;
GridViewRow row = (GridViewRow)ctrlTime.NamingContainer;
DbDataRecord usersRow = (DbDataRecord)row.DataItem;
DateTime timestamp = (DateTime)usersRow["Time"];
我可能会使用 (MaterializedDataRecord) 而不是 (DbDataRecord),我只是不想吓到我的同事。现在,这行得通,但是我觉得它很难看,并且有点破坏了使用 EntityFramework 的美感。此外,这是一个非常基本的示例,将来我可能会遇到类似的情况,我需要对许多其他字段进行装箱/拆箱,这看起来不太好。
所以我的问题是:有什么方法可以轻松地将 MaterializedDataRecord 转换为实体或设置 EntityDataSource 不考虑“选择”中存在的某些东西作为“威胁”,从而导致创建 MaterializedDataRecord 而不是实体?
我的意思是,如果我选择实体字段的子集,我会理解这种行为,但在这里我选择了所有字段,所以这对于 EntityDataSource 转换来说应该不是问题。
谢谢!