1

背景:Project 是一个数据导入实用程序,用于通过 DbContext 将数据从 tsv 文件导入 EF5 DB。

问题:我需要在导入时查找 ForeignKeys。我有办法做到这一点,但如果 ID 不起作用,则进行检索。

所以我有一个 TSV 文件示例将是

Code    Name    MyFKTableId
codevalue   namevalue   select * from MyFKTable where Code = 'SE'

因此,当我处理文件并查找“...Id”列时,我知道我需要查找 FK '...' 始终是实体类型,所以这非常简单。我遇到的问题是我无权访问 foundEntity 结果的属性

string childEntity = column.Substring(0, column.Length - 2);
DbEntityEntry recordType = myContext.Entry(childEntity.GetEntityOfReflectedType());

DbSqlQuery foundEntity = myContext.Set(recordType.Entity.GetType()).SqlQuery(dr[column])

任何建议将不胜感激。我需要保持这个通用性,这样我们就不能使用已知的类型转换。可从 IBaseEntity 访问的 Id 属性,因此我可以强制转换它,但所有其他实体类型不得固定

注意:MyFKTableId 值中的 SQL 不是必需的。如果有更好的选择允许摆脱 SqlQuery() 我会接受建议。

已解决: 好的,我所做的是创建一个名为 IdClass 的类,它只有一个用于 Id 的 Guid 属性。将我的 sql 修改为只返回 Id。然后在数据库上实现 SqlQuery(sql) 调用,而不是像这样的 Set([Type]).SqlQuery(sql) 。

IdClass x = ImportFactory.AuthoringContext.Database.SqlQuery<IdClass>(sql).FirstOrDefault();
4

1 回答 1

0

已解决: 好的,我所做的是创建一个名为 IdClass 的类,它只有一个用于 Id 的 Guid 属性。将我的 sql 修改为只返回 Id。然后在数据库上实现 SqlQuery(sql) 调用,而不是像这样的 Set([Type]).SqlQuery(sql) 。

IdClass x = ImportFactory.AuthoringContext.Database.SqlQuery<IdClass>(sql).FirstOrDefault();
于 2013-04-25T13:22:37.707 回答