背景: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。然后在数据库而不是Set([Type])上实现了SqlQuery(sql)调用.SqlQuery(sql)就是这样。
IdClass x = ImportFactory.AuthoringContext.Database.SqlQuery<IdClass>(sql).FirstOrDefault();
答案 0 :(得分:0)
<强>解决:强> 好的我做的是创建一个名为IdClass的类,它只有Id的Guid属性。修改我的sql只返回Id。然后在数据库而不是Set([Type])上实现了SqlQuery(sql)调用.SqlQuery(sql)就是这样。
IdClass x = ImportFactory.AuthoringContext.Database.SqlQuery<IdClass>(sql).FirstOrDefault();